Python爬虫入门教程 13-100 斗图啦表情包多线程爬取
1.准备爬取斗图la写在前面
今天在CSDN博客,发现好多人写爬虫都在爬取一个叫做斗图啦
的网站,里面很多表情包,然后瞅了瞅,各种实现方式都有,今天我给你实现一个多线程版本的。关键技术点 aiohttp
,你可以看一下我前面的文章,然后在学习一下。
网站就不分析了,无非就是找到规律,拼接URL,匹配关键点,然后爬取。
2.开始撸代码
首先快速的导入我们需要的模块,和其他文章不同,我把相同的表情都放在了同一个文件夹下面,所以需要导入os
模块
import asyncio import aiohttp from lxml import etree import os
编写主要的入口方法
if __name__ == '__main__': url_format = "http://www.doutula.com/article/list/?page={}" urls = [url_format.format(index) for index in range(1,586)] loop = asyncio.get_event_loop() tasks = [x_get_face(url) for url in urls] results = loop.run_until_complete(asyncio.wait(tasks))
我们是为了学习,不是为了攻击别人服务器,所以限制一下并发数量
sema = asyncio.Semaphore(3) async def x_get_face(url): with(await sema): await get_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"} async def get_face(url): print("正在操作{}".format(url)) async with aiohttp.ClientSession() as s: async with s.get(url,headers=headers,timeout=5) as res: if res.status==200: html = await res.text() html_format = etree.HTML(html) hrefs = html_format.xpath("//a[@class='list-group-item random_list']") for link in hrefs: url = link.get("href") title = link.xpath("div[@class='random_title']/text()")[0] # 获取文件头部 path = './biaoqings/{}'.format(title.strip()) # 硬编码了,你要先在项目根目录创建一个biaoqings的文件夹 if not os.path.exists(path): os.mkdir(path) else: pass async with s.get(url, headers=headers, timeout=3) as res: if res.status == 200: new_html = await res.text() new_html_format = etree.HTML(new_html) imgs = new_html_format.xpath("//div[@class='artile_des']") for img in imgs: try: img = img.xpath("table//img")[0] img_down_url = img.get("src") img_title = img.get("alt") except Exception as e: print(e) async with s.get(img_down_url, timeout=3) as res: img_data = await res.read() try: with open("{}/{}.{}".format(path,img_title.replace('\r\n',""),img_down_url.split('.')[-1]),"wb+") as file: file.write(img_data) except Exception as e: print(e) else: pass else: print("网页访问失败")
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云栖开发者沙龙PHP技术专场-静态扫描为你的PHP项目上线保驾护航
摘要:在4月20日的阿里云栖开发者沙龙PHP技术专场上,阿里云资深研发工程师周梦康(楚松)为大家分享了如何借助静态扫描来为我们的PHP项目上线保驾护航,他从Why、How和What三个角度为大家分享了静态扫描的落地实践和最终成果。 本次直播视频精彩回顾,戳这里!直播回顾:https://yq.aliyun.com/live/965PPT分享:https://yq.aliyun.com/download/3531以下内容根据演讲视频以及PPT整理而成。 演讲专家简介: 周梦康(花名:楚松),阿里云资深研发工程师,《深入PHP内核》作者之一,多个开源项⽬目 tipi、yar-java、doc-php的作者与参与者 本次的分享主要围绕以下三个方面: 为什么要代码静态扫描 怎么去做代码静态扫描 发布与集成测试的成果 为什么要代码静态扫描 什么是静态扫描如下
- 下一篇
支付宝卡包集成流程
该产品可以用于管理电子凭证的产品,该产品聚合来自各类生活服务的票据凭证,包括优惠券、折扣券、代金券、换购券、电影票、演出票、火车票、机票。 用户交易创建后,企业或者个人开发者根据交易外部订单号可以通过支付宝提供的开放接口,把卡券添加到支付宝卡包,用户可以通过支付宝钱包客户端,在卡包功能中查看并使用卡券。 一、文档地址 官方文档地址:[url]https://docs.open.alipay.com/199/105248/[/url] 二、开发前准备工作 调用步骤:[url]https://openclub.alipay.com/read.php?tid=12194&fid=69[/url] 注意事项:1、支持沙箱测试;2、不需签约,但需要添加功能;3、支持第三方调用。 检查调用appid的应用功能列表中是否添加“支付宝卡包”。 三、接口集
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7