首页 > 编程知识 正文

爬虫 表情包,爬虫的表情包是什么意思

时间:2023-05-03 08:22:06 阅读:280532 作者:68

1.思路

2.分析


1.分析页面规律
https://www.doutula.com/photo/list/?page=1 第一页
https://www.doutula.com/photo/list/?page=2 第二页
https://www.doutula.com/photo/list/?page=3 第三页
可以看出,page 的值跟点击的页数有关,因此,我们就拿到了要爬取的 url
2.打开检查元素,可以看到html源码

可以看出,每一页的图片都在 div 标签里面,然后每一个 a 标签包含一个图片。
我们要取到表情包,就是要取得 a 标签包含的图片 url,我们可以利用 xpath 语法。
获取 img 标签取到的 img 有 gif 的信息,我们需要过滤掉
imgs = html.xpath(’//div[@class=“page-content text-center”]//img[@class!=“gif”]’)

3.代码 import requestsfrom lxml import etreeimport osfrom time import *# 开始时间start = time()# 定义一个函数来解析网页def parse_page(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36' } response = requests.get(url,headers=headers) # print(response.text) # 网页源码 text = response.text html = etree.HTML(text) # 获取Img 并且把gif的图片过滤掉 imgs = html.xpath('//div[@class="page-content text-center"]//img[@class!="gif"]') for img in imgs: #print(etree.tostring(img)) # 获取每张图片的url img_url = img.get('data-original') # # 获取图片的名字 alt = img.get('alt') # # 在os模块中可以很好的分割字符,比如这种带.的数据 suffix = os.path.splitext(img_url)[1] # # 把图片的名字进行拼接 filename = alt + suffix # # print(filename) # # 保存图片(在C:UserszjbPycharmProjectspyth下建立img1目录(pycharm目录)) with open('img1/' + filename,'wb') as f: img_rep = requests.get(img_url) f.write(img_rep.content)def main( ): for x in range(1,2): # print(x) url = 'https://www.doutula.com/photo/list/?page=%d'%x parse_page(url)if __name__ == '__main__': main() end = time() print('程序共花费了:',end - start) 4.运行结果

C:UserszjbPycharmProjectspythimg1目录下如下图:

程序共花费了: 33.389782428741455 #用多线程爬取表情包# https://www.doutula.com/photo/list/?page=1 第一页# https://www.doutula.com/photo/list/?page=2 第二页# ttps://www.doutula.com/photo/list/?page=3 第三页import requestsfrom lxml import etreeimport osfrom time import *from queue import Queueimport threading# 开始时间start = time()# 定义生产者对象class Procuder(threading.Thread): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36' } def __init__(self,page_queue,img_queue,*args,**kwargs): super(Procuder,self).__init__(*args,**kwargs) self.page_queue = page_queue self.img_queue = img_queue def run(self): while True: # 如果队列没有数据就退出循环 if self.page_queue.empty(): break # 拿到网页的url url = self.page_queue.get() # 调用解析网页的函数 self.parse_page(url) # 定义一个函数来解析网页 def parse_page(self,url): response = requests.get(url,headers=self.headers) # print(response.text) # 网页源码 text = response.text html = etree.HTML(text) # 获取Img 并且把gif的图片过滤掉 imgs = html.xpath('//div[@class="page-content text-center"]//img[@class!="gif"]') for img in imgs: # print(etree.tostring(img)) # 获取每张图片的url img_url = img.get('data-original') # 获取图片的名字 alt = img.get('alt') # 在os模块中可以很好的分割字符,比如这种带.的数据 suffix = os.path.splitext(img_url)[1] # 把图片的名字进行拼接 filename = alt + suffix # print(filename) # 保存图片 with open('img1/' + filename,'wb') as f: img_rep = requests.get(img_url) f.write(img_rep.content)# 定义消费者# 定义生产者对象class Consumer(threading.Thread): def __init__(self, page_queue, img_queue, *args, **kwargs): super(Consumer, self).__init__(*args, **kwargs) self.page_queue = page_queue self.img_queue = img_queue def run(self): while True: if self.img_queue.empty() and self.page_queue.empty(): break img_url,filename = self.img_queue.get() # 保存图片 with open('img1/' + filename, 'wb') as f: img_rep = requests.get(img_url) f.write(img_rep.content)def main(): # 定义页数的队列 page_queue = Queue(100) # 定义图片的url img_queue = Queue(500) for x in range(1,2): # print(x) url = 'https://www.doutula.com/photo/list/?page=%d'%x # parse_page(url) # 把页数添加到队列中 page_queue.put(url) # 创建生产者和消费者 # 创建生产者 for x in range(5): t = Procuder(page_queue,img_queue) t.start() # 创建消费者 for x in range(5): t = Consumer(page_queue,img_queue) t.start()if __name__ == '__main__': main() end = time() print('程序共花费了:',end - start)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。