网络爬虫——爬虫实战(一)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43972621/article/details/85937936

图片爬虫实战

假如我们想把jd商城的商品图片下载到本地,通过手工复制粘贴将是一份非常庞大的工程,此时,可以用Python网络爬虫实现。我们可以通过Python网络爬虫将这些网页上的图片全部爬取到本地,这类爬虫称为图片爬虫。
首先打开jd商城的首页,在搜索输入框中输入想要爬取的商品,例如:裤子。如下图所示:
在这里插入图片描述
再查看该网页的网址,该网址就是我们需要爬取的起始页面,如下图所示:
在这里插入图片描述在这里插入图片描述

一、导入模块

import re
from urllib import request as req
from urllib import parse as pa

二、主函数

if __name__=="__main__":
	key = input("请输入关键字:")
	wd = {'keyword': key}
	keyword = pa.urlencode(wd)
	controllspider('https://search.jd.com/Search?'+keyword+'&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=%E8%A3%A4%E5%AD%90')

key:即我们需要下载图片的商品名称
urlencode():urllib库里的parse模块,对关键字进行编码
controllspider:爬虫控制器,负责整个爬取过程的调度

三、爬虫控制器

def controllspider(url):
	'''
	功能:爬虫的控制器,负责整个爬取过程的调度
	:param url:初始爬取的url
	:return:
	'''
	# 爬虫控制开关
	flag = True
	page = 1
	while flag:
		flag = False
		print("\n\n\n")
		print("--------------------------------------正在爬取第%s页-------------------------------------------------------"%page)
		urls= url+'&page='+str(page)
		product_list=spider(urls)
		downloadimg(product_list)
		control_input = input("是否继续?(按enter继续,Q退出)")
		if control_input != 'Q':
			flag = True
			page += 1

爬取过程中,可进行交互功能,由用户决定是否继续爬取。
控制器(controllspider)将需要爬取的URL链接交给爬虫(spider),爬虫(spider)返回图片链接的集合。
控制器(controllspider)再将返回的图片链接集合交给下载器(downloadimg),将图片下载至本地。
控制器(controllspider)会判断是否满足停止条件。

四、爬虫spider

def spider(url):
	'''
	功能:获取图片链接
	:param url: 待爬取的网页url链接
	:return: 返回该页所有的商品图片的链接
	'''
	headers={'User-Agent':'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)'}
	request=req.Request(url,headers=headers)
	html=req.urlopen(request)
	html=str(html.read())
	print(url)
	#pattern1='<li class="gl-item">.*? </li>'
	pattern1 = 'class="gl-item".*?</li>'
	results1=re.compile(pattern1).findall(html)
	print(results1)
	product_list=[]
	for result in results1:
		product_dict = {}
		pattern2='//img.*?"'
		imageurl=re.compile(pattern2).findall(result)
		product_dict['imageurl'] = imageurl
		product_list.append(product_dict)
	return product_list

headers :在使用python爬虫爬取数据的时候,经常会遇到一些网站的反爬虫措施,一般就是针对于headers中的User-Agent,如果没有对headers进行设置,而如果网站有反爬虫的话会拒绝这样的连接,因此修改headers可以将自己的爬虫脚本伪装成浏览器的正常访问。

re正则的使用:调用urlopen函数,返回HTML内容,调用**str(html)**函数将其转换为字符串。结合我上一篇的正则表达式用法,将字符串里面的所有图片链接URL匹配完成,返回URL集合。

五、下载器

def downloadimg(product_list):
'''
功能:根据URL下载图片
:param product_list: 图片URL集合
:return:
'''
for product in product_list:
	imageurl = product['imageurl']
	imageurl = imageurl[0].replace('"', '')
	imageurl = "http:" + imageurl
	print(imageurl)
	filename='image\\'+str(imageurl)[-20:]
	headers={'User-Agent':'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)'}
	request=req.Request(imageurl,headers=headers)
	html=req.urlopen(request).read()
	with open(filename,'wb') as f:
		f.write(html)

根据图片的URL链接,获取html的相应内容,再将其写入到本地(图片需要用"wb"模式进行写入)。

五、效果演示

在这里插入图片描述

六、结束语

最后,祝大家都能够学有所成!!!

猜你喜欢

转载自blog.csdn.net/weixin_43972621/article/details/85937936