今天学习了利用多线程爬妹子图网站的图集,最后实现功能:给定页码爬取当前页码全部图片,并按照图集名称命名图集文件夹;利用多线程技术,大大加快爬虫速度。
地址如下:
详细解析爬虫思路:
一、需要用到的package:
- requests:主要进行互联网数据传输
- lxml:执行对HTML和XML的解析,使用XPATH方式,适用于HTML文件中进行搜索
- os:主要进行文件夹的建立,文件的下载
- time:时间函数,设定延迟时间,尽量避免网站的反爬虫措施
- multiprocessing.dummy :多线程,将一个任务划分为多个线程同时进行,大大加快爬虫速度
二、程序结构解析:
- def header(referer): 获取网站请求头伪装浏览器行为;借助referer反防盗链,防止网站发起网页跳转导致内容出错
- def getPage(pageNum): 获取网站页码,设定爬虫目标的依据
- def getPiclink(url): 相关文件夹的建立以及图片的下载
- 主函数:根据设定的页码实施文件下载,并建立4线程同时运行
三、具体细节讨论
-
'Referer': '{}'.format(referer),
-
selector=html.fromstring(requests.get(baseUrl).content)
-
for i in selector.xpath('//ul[@id="pins"]/li/a/@href'):
-
sel=html.fromstring(requests.get(url).content) total=sel.xpath('//div[@class="pagenavi"]/a[last()-1]/span/text()')[0] title=sel.xpath('//h2[@class="main-title"]/text()')[0] dirName = u"【{}P】{}".format(total, title)
-
link='{}/{}'.format(url,i+1)
-
pool.map(getPiclink,p)