前言
昨天跟小伙伴斗图,关于斗图这件事,我表示我从来没有输过。至于为什么不会输,这些都是男人的秘密,今天我想把这个小技
巧告诉大家。学会了记得挑战你最好的朋友,打赌让他输了请你吃大西瓜…
1、介绍
•平台:斗图啦
•语言:python
•技术:python多线程、python安全队列、python之Xpath、正则、request
以上我们使用的技术,都是之前整理过的对不对,那么我们就根据之前的学习内容来进行爬取斗图表情包吧。
2、python爬取流程梳理
我们刚开始学习的时候,是不是每次都需要梳理下爬取的流程呢,那么这次咱们还是和之前一样,首先我们需要找到我们爬取的平台的网址是什么:
https://dou.yuanmazg.com/doutu?page=1
访问这个界面之后,我们可以看到如下显示的内容:
然后我们往下滑之后,可以看到这里一共有1500+的页面,那么我们现在爬取前50页的内容吧,大概流程我觉得应该如下哈:
1.获取每个页面的url;
2.将获取到的url放置Queue中;
3.从Queue中获取一个Url,使用requests获取内容,使用xpath获取取该Url中每一个图片的Url;
4.然后将每个图片中的Url放入到另一个Queue中;
5.然后再从第二个Queue中获取图片的url;
6.根据Queue来下载并保存即可;
7.以上步骤我们使用多线程+Queue的形式来进行。
3、python爬取图片
3.1 框架
老样子,首先我们简简单单写一个框架;
import threading
class Producter(threading.Thread):
pass
class Consumer(threading.Thread):
pass
def main():
pass
if __name__ == '__main__':
main()
然后我们一步一步进行;
3.2 初步获取页面有效信息
python学习交流Q群:906715085###
import requests
from lxml import etree
Url = 'https://dou.yuanmazg.com/doutu?page=1'
Header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/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)
3.3 提取每一个图片的url和name
import requests
from lxml import etree
Url = 'https://dou.yuanmazg.com/doutu?page=1'
Header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/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)
for i in Page_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")</