爬虫案例——网易新闻数据的爬取
案例需求:
1.爬取该新闻网站——(网易新闻)的数据,包括标题和链接
2.爬取所有数据(翻页参数)
3.利用jsonpath解析数据
分析:
该网站属于异步加载网站——直接网页中拿不到,需要借助fidder抓包工具拿取
可以看到第一页请求网址
https://news.163.com/special/cm_yaowen20200213/?callback=data_callback
第二页请求网址
https://news.163.com/special/cm_yaowen20200213_02/?callback=data_callback
第五页(最后一页)请求网址:
https://news.163.com/special/cm_yaowen20200213_05/?callback=data_callback
所以翻页代码如下:
首页地址为第一页地址
for i in range(2,6): print('==========', '当前是第{}页'.format(i)) page_url = 'https://news.163.com/special/cm_yaowen20200213_0{}/?callback=data_callback'.format(i)
利用josnpath解析数据
因为该网页不是常规的josn源码数据,所以需要进行一些处理
text_data=data.split('data_callback(')[1] # print(text_data) text_data1 = text_data.split(')')[0] # print(text_data1) json_data = json.loads(text_data1) title = jsonpath(json_data,'$..title') url = jsonpath(json_data,'$..docurl')
处理解析数据
for i,j in zip(title,url): print(i) print(j) print('=======================================')
示例代码:
import requests
from jsonpath import jsonpath
import json
def get_data(url):
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'
}
r = requests.get(url,headers=headers)
# print(r.text)
return r.text
# print(r.text)
# print(r.json())
def parse_data(data):
text_data=data.split('data_callback(')[1]
# print(text_data)
text_data1 = text_data.split(')')[0]
# print(text_data1)
json_data = json.loads(text_data1)
title = jsonpath(json_data,'$..title')
url = jsonpath(json_data,'$..docurl')
for i,j in zip(title,url):
print(i)
print(j)
print('=======================================')
# print(title)
# print(url)
if __name__ == '__main__':
url = "https://news.163.com/special/cm_yaowen20200213/?callback=data_callback "
# h = get_data()
# parse_data(h)
for i in range(2,6):
print('==========', '当前是第{}页'.format(i))
page_url = 'https://news.163.com/special/cm_yaowen20200213_0{}/?callback=data_callback'.format(i)
h = get_data(page_url)
parse_data(h)