python可以爬取别人微信表情包吗(python爬虫-26-批量爬取表情包)
我们现在聊天的时候,总会动不动就开启斗图大会,你有没有陷入无图可发的窘境呢,现在我就带着你解决这个问题。
1、介绍
- 平台:斗图啦
- 语言:python
- 技术:python多线程、python安全队列、python之Xpath、正则、request
以上我们使用的技术,都是之前整理过的对不对,那么我们就根据之前的学习内容来进行爬取斗图表情包吧。
2、python爬取流程梳理我们刚开始学习的时候,是不是每次都需要梳理下爬取的流程呢,那么这次咱们还是和之前一样,首先我们需要找到我们爬取的平台的网址是什么:
https://dou.yuanmazg.com/doutu?page=1
访问这个界面之后,我们可以看到如下显示的内容:
然后我们往下滑之后,可以看到这里一共有1500 的页面,那么我们现在爬取前50页的内容吧,大概流程我觉得应该如下哈:
3、python爬取图片3.1 框架
- 获取每个页面的url;
- 将获取到的url放置Queue中;
- 从Queue中获取一个Url,使用requests获取内容,使用xpath获取取该Url中每一个图片的Url;
- 然后将每个图片中的Url放入到另一个Queue中;
- 然后再从第二个Queue中获取图片的url;
- 根据Queue来下载并保存即可;
- 以上步骤我们使用多线程 Queue的形式来进行。
老样子,首先我们简简单单写一个框架;
importthreading classProducter(threading.Thread): pass classConsumer(threading.Thread): pass defmain(): pass if__name__=='__main__': main()
然后我们一步一步进行;
3.2 初步获取页面有效信息3.3 提取每一个图片的url和name
importrequests fromlxmlimportetree Url='https://dou.yuanmazg.com/doutu?page=1' Header={'user-agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/86.0.4240.198Safari/537.36'} Page_get=requests.get(url=Url,headers=Header) Page_content=Page_get.text Page_message=etree.HTML(Page_content) Page_div=Page_message.xpath('//div[@class="page-content"]')[0] Page_div=etree.tostring(Page_div,pretty_print=True,method='html').decode('utf-8') print(Page_div)
importrequests fromlxmlimportetree Url='https://dou.yuanmazg.com/doutu?page=1' Header={'user-agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/86.0.4240.198Safari/537.36'} Page_get=requests.get(url=Url,headers=Header) Page_content=Page_get.text Page_message=etree.HTML(Page_content) Page_div=Page_message.xpath('//div[@class="page-content"]//a//img') #Page_div=etree.tostring(Page_div,pretty_print=True,method='html').decode('utf-8') #print(Page_div) foriinPage_div: #print(etree.tostring(i,pretty_print=True,method='html').decode('utf-8')) Page_url='https://dou.yuanmazg.com' i.xpath("@data-original")[0] Page_name=i.xpath("@alt")[0] print(Page_url) print(Page_name)
输出结果如下:
3.4 优化名字
我们可以看到我们获取的图片的名字中有特殊符号,但是我们的电脑上文件名字是不可以出现特殊符号的,那么我们是不是就需要把名字给他处理一下呢,优化走起,优化之后的代码如下:
importrequests fromlxmlimportetree importre Url='https://dou.yuanmazg.com/doutu?page=1' Header={'user-agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/86.0.4240.198Safari/537.36'} Page_get=requests.get(url=Url,headers=Header) Page_content=Page_get.text Page_message=etree.HTML(Page_content) Page_div=Page_message.xpath('//div[@class="page-content"]//a//img') #Page_div=etree.tostring(Page_div,pretty_print=True,method='html').decode('utf-8') #print(Page_div) foriinPage_div: #print(etree.tostring(i,pretty_print=True,method='html').decode('utf-8')) Page_url='https://dou.yuanmazg.com' i.xpath("@data-original")[0] Page_name=i.xpath("@alt")[0] Page_name=re.sub(r'[,。??,/\\·\*\]','',Page_name) print(Page_url) print(Page_name)
随之我们又发现了另一个问题,那就是有些图片他是没有添加描述的,也就是无法获取该图片的名字,那么我们就随机给他一个名字吧;
importrequests fromlxmlimportetree importre importrandom Url='https://dou.yuanmazg.com/doutu?page=1' Header={'user-agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/86.0.4240.198Safari/537.36'} Page_get=requests.get(url=Url,headers=Header) Page_content=Page_get.text Page_message=etree.HTML(Page_content) Page_div=Page_message.xpath('//div[@class="page-content"]//a//img') #Page_div=etree.tostring(Page_div,pretty_print=True,method='html').decode('utf-8') #print(Page_div) foriinPage_div: #print(etree.tostring(i,pretty_print=True,method='html').decode('utf-8')) Page_url='https://dou.yuanmazg.com' i.xpath("@data-original")[0] Page_name=i.xpath("@alt")[0] Page_name=re.sub(r'[,。??,/\\·\*\]','',Page_name) ifPage_name=="": Page_name=str(random.random()) print(Page_url) print(Page_name)
到这里是不是名字这个事儿就完事儿了呢,当然不了,想一下,我们在电脑上创建文件的时候是不是还需要后缀名呢,那我们就应该也把后缀名获取一下子,再次优化之后,代码如下:
importrequests fromlxmlimportetree importre importrandom importos Url='https://dou.yuanmazg.com/doutu?page=1' Header={'user-agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/86.0.4240.198Safari/537.36'} Page_get=requests.get(url=Url,headers=Header) Page_content=Page_get.text Page_message=etree.HTML(Page_content) Page_div=Page_message.xpath('//div[@class="page-content"]//a//img') #Page_div=etree.tostring(Page_div,pretty_print=True,method='html').decode('utf-8') #print(Page_div) foriinPage_div: #print(etree.tostring(i,pretty_print=True,method='html').decode('utf-8')) Page_url='https://dou.yuanmazg.com' i.xpath("@data-original")[0] Suffix=os.path.splitext(Page_url)[1] Page_name=i.xpath("@alt")[0] Page_name=re.sub(r'[,。??,/\\·\*\]','',Page_name) ifPage_name=="": Page_name=str(random.random()) Suffix else: Page_name=Page_name Suffix print(Page_url) print(Page_name)
运行之后结果如下:
好的,这样子的话我们就成功的使用python获取了每一个页面中每一个图片的地址和名字
3.5 下载当我们获取到了图片的下载地址,以及图片名字之后,我们就可以进行下载了,那么我们的代码就变成了下面的内容:
剩余内容请转至VX公众号 “运维家” ,回复 “187” 查看。
------ “运维家” ,回复 “187” ------
------ “运维家” ,回复 “187” ------
------ “运维家” ,回复 “187” ------
运维工程师是干什么的,收单猫运维工程师,武威光伏运维工程师,西安运维交付工程师招聘,石家庄网络运维工程师招聘;
数据中心运维基础工程师,运维工程师刚进公司什么都不会,顺丰的it运维工程师,佛山IDC机房运维工程师招聘,武汉仕云运维工程师加班多吗;
运维工程师T1,设施运维工程师转型,erp运维工程师培训课题,江西环保运维工程师招聘,通富微电子桌面运维工程师;
成都科技园运维工程师招聘,运维工程师的英语怎么说,运维工程师ppt,粤电风 电运维工程师咋样,运维工程师的薪酬。
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com