某热榜数据爬虫详解
站长
· 阅读数 13
过了小长假之后工作一直不在状态,今天都周二了才算缓过来,再舒适圈中待久了就容易变得懒作,继续采集新闻热榜数据。今天采集雷锋网。
- 话不多说直接开始,还是此案分析一下网站结构,网站地址
ok,到首页之后直接看最新文章,这里就是要采集的列表页数据了,有了数据列表就翻个页看看数据接口什么样子的
滚轮一直滚动,进度条回滚标识翻页,通过抓包可以发现,这个数据是在接口中接口中又放了html源码。也没其他的什么参数只有翻页参数,那这个列表页就ok了,然后再看一下详情页数据接口是什么样子的。
可见详情页数据也是在html中的,后面那一溜应该是文章的id,这个id也是在列表的超链接中的
ok,到这里就明了了。
- 先请求列表页,解析出来所有的文章
cookies = {
'SameSite': 'None',
'PHPSESSID': '0c36b82b9e599b2dcd41da91f5a7d907',
}
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
# 'Cookie': 'SameSite=None; PHPSESSID=0c36b82b9e599b2dcd41da91f5a7d907',
'Pragma': 'no-cache',
'Referer': 'https://www.leiphone.com/',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'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',
'X-Requested-With': 'XMLHttpRequest',
'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"',
}
response = requests.get('https://www.leiphone.com/site/AjaxLoad/page/3', cookies=cookies, headers=headers).json()['html']
print('')
res = etree.HTML(response)
data_list = res.xpath("//li/div/div/h3/a")
for data in data_list:
title = data.xpath("./text()")[0].replace('\r\n\t\t\t\t','').replace('\t\t\t','').replace(' ','')
url = data.xpath("./@href")[0]
print(title,url)
然后再请求详情页数据并使用gne解析出来内容
cookies = {
'SameSite': 'None',
'PHPSESSID': '0c36b82b9e599b2dcd41da91f5a7d907',
}
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',
# 'Cookie': 'SameSite=None; PHPSESSID=0c36b82b9e599b2dcd41da91f5a7d907',
'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"',
}
response = requests.get(
url,
cookies=cookies,
headers=headers,
)
extractor = GeneralNewsExtractor()
result = extractor.extract(response.text, noise_node_list=['//div[@class="comment-list"]'])
print(result)
input()
ok,没什么问题,通过使用gne这么久以来感觉这个自动解析库并不是一无是处,还是有些用处的