爬虫爬取网站斗图吧的表情包,带源码
"""
爬取网站:斗图啦
爬取方式:XPATH
"""
import requests
import parsel
import concurrent
#import os,sys
import time
'''
表情包python多线程爬取
requests:数据请求模块
parsel:数据解析模块
思路:
1,确定正确的url地址(静态网页\动态网页(动态加载<涉及到数据库查询>))
2,请求数据--requests(模拟浏览器请求数据库的数据,但是请求到的是范数据)
3,数据解析--parsel(解析范数据)
4,保存数据(本地文件\数据库)
'''
wq = input('enter a word:')
params = {
'keyword':wq
}
page_list = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
for page in page_list:
base_url = "https://www.doutula.com/search?type=photo&more=1&keyword=%E6%92%A9%E5%A6%B9&page={}".format(page)
#1,确定正确的url地址(静态网页\动态网页(动态加载<涉及到数据库查询>))
#base_url = "https://www.doutula.com/search?type=photo&more=1&keyword=%E6%92%A9%E5%A6%B9&page=2"
header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"}
#User-Agent:身份标识,伪装身份,伪装成浏览器(最常见的一个反扒字段)
#2,请求数据--requests
response = requests.get(url=base_url,params=params,headers=header)
html_data = response.text
#网页由于要保证性能,所以大部分使用的加载方式是懒加载,所以不能使用src,而是使用data-original
#3,数据解析--parsel
#3.1转换数据类型
selector = parsel.Selector(html_data)
result_list = selector.xpath('//a[@class="col-xs-6 col-md-2"]')#//表示跨节点提取;@class:根据属性对标签精确定位;返回列表形式
#二次数据获取
for result in result_list:
title = result.xpath('./img/@alt').get()#获取img标签
print(title)
img_url = result.xpath('./img/@data-original').get()#获取data-original标签
all_title = img_url.split('_')[-1]
#请求图片数据
img_data = requests.get(url=img_url,headers=header).content#二进制数据
#4,保存数据(本地文件\数据库)
route = 'D:/Python_Project/Emoticon_code/img{}/'.format(page)
with open(route + all_title,mode='wb') as f:
f.write(img_data)
print("保存完成:",all_title,page)
注释上已经标注的很清晰了,有兴趣的小伙伴可以试试。
分为了两步,第一步是获取网页的标签数据,第二次通过第一步获取的标签数据去请求图片(也就是表情包)的url地址,遍历下载到本地