美文网首页python热爱者Python新世界
Python爬虫入门教程,多线程采集斗图啦表情包!

Python爬虫入门教程,多线程采集斗图啦表情包!

作者: 48e0a32026ae | 来源:发表于2018-12-27 14:41 被阅读0次

写在前面

今天在CSDN博客,发现好多人写爬虫都在爬取一个叫做斗图啦的网站,里面很多表情包,然后瞅了瞅,各种实现方式都有,今天我给你实现一个多线程版本的。关键技术点 aiohttp ,你可以看一下我前面的文章,然后在学习一下。

网站就不分析了,无非就是找到规律,拼接URL,匹配关键点,然后爬取。

https://github.com/wangdezhen/spide

撸代码

首先快速的导入我们需要的模块,和其他文章不同,我把相同的表情都放在了同一个文件夹下面,所以需要导入os模块

importasyncioimportaiohttpfromlxmlimportetreeimportos

编写主要的入口方法

if__name__== '__main__':url_format="http://www.doutula.com/article/list/?page={}"urls= [url_format.format(index) for indexinrange(1,586)]loop= asyncio.get_event_loop()tasks= [x_get_face(url) for urlinurls]results= loop.run_until_complete(asyncio.wait(tasks))

我们是为了学习,不是为了攻击别人服务器,所以限制一下并发数量

sema = asyncio.Semaphore(3)asyncdefx_get_face(url):with(awaitsema):awaitget_face(url)

最后,一顿操作猛如虎,把所有的代码补全,就搞定了,这部分没有什么特别新鲜的地方,找图片链接,然后下载。

headers = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"}asyncdefget_face(url):print("正在操作{}".format(url))asyncwithaiohttp.ClientSession()ass:asyncwiths.get(url,headers=headers,timeout=5)asres:ifres.status==200: html =awaitres.text() html_format = etree.HTML(html) hrefs = html_format.xpath("//a[@class='list-group-item random_list']")forlinkinhrefs: url = link.get("href") title = link.xpath("div[@class='random_title']/text()")[0]# 获取文件头部path ='./biaoqings/{}'.format(title.strip())# 硬编码了,你要先在项目根目录创建一个biaoqings的文件夹ifnotos.path.exists(path): os.mkdir(path)else:passasyncwiths.get(url, headers=headers, timeout=3)asres:ifres.status ==200: new_html =awaitres.text() new_html_format = etree.HTML(new_html) imgs = new_html_format.xpath("//div[@class='artile_des']")forimginimgs:try: img = img.xpath("table//img")[0] img_down_url = img.get("src") img_title = img.get("alt")exceptExceptionase: print(e)asyncwiths.get(img_down_url, timeout=3)asres: img_data =awaitres.read()try:withopen("{}/{}.{}".format(path,img_title.replace('\r\n',""),img_down_url.split('.')[-1]),"wb+")asfile: file.write(img_data)exceptExceptionase: print(e)else:passelse: print("网页访问失败")

等着,大量的表情包就来到了我的碗里。

相关文章

网友评论

    本文标题:Python爬虫入门教程,多线程采集斗图啦表情包!

    本文链接:https://www.haomeiwen.com/subject/vpbrlqtx.html