冷知识数据爬虫详解

116 阅读2分钟

印度为什么发行0元纸币?看到这个问题是不是有点惊讶,有很多零知识没有机会恐怕永远也不会知道,今天爬一些冷知识数据补充一下知识库。

image.png

  1. 话不多说,直接开始,还是先分析一下网站结构,网站地址

image.png 打开网站之后可见这里就是数据列表页了,根据名称可以知道这个网站已经有八百九十二个冷知识了,打开详情页看一下

image.png 数据的详情页就是域名加资源目录加892,那也就是说第一个文章就是加1呗,试一下

image.png 就是这样,那就简单了不需要采集列表页了直接遍历892个冷知识就可以了哈。 抓一下详情页的包然后模拟放请求就可以了

  1. 遍历请求八百九十二篇文章
headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive',
    'Pragma': 'no-cache',
    'Sec-Fetch-Dest': 'document',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-Site': 'none',
    'Sec-Fetch-User': '?1',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36',
    'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
}
for page in range(1,893):
    response = requests.get(f'https://www.quzhishi.com/shiwangelengzhishi/{page}.html', headers=headers)

这里网页结构不是很规范就需要自己写xpath来解析数据

res = etree.HTML(response.text)
data_List = res.xpath("//ul[@class='ul']/li")
for data in data_List:
    title = data.xpath("./text()")
    print(title)

image.png 发现乱码需要转码一下

response.encoding = response.apparent_encoding

image.png ok没什么问题,文本格式自行修改一下就可以。 有人说我写文章都不说明cookies的反爬,其实在之前写模拟登录的文章里面有requests.session()的介绍和使用,其他的网站也是一样的。只需要会话保持模拟整个访问的流程就会得到返回的cookies了,有的网站会禁止session传递cookies信息,那就使用requests来请求一步获取一下当前的请求返回的cookies下次请求的是时候使用就可以,之后更一篇详细的处理这两种情况的文章。