动态页面的确认:
同一个页面有两个url;
或者有xhr;
最粗暴的方法就是无限加载页面。
补充一下:
如何快速在自带浏览器E找到网址,快速查询:
有时在访问了请求后,并不能获取想要的数据。很大的原因之一就是,当前的页面是动态的。目前网络的页面分为2大类:
-
静态页面
- 特征:访问有UI页面URL,可以直接获取数据
-
动态页面(AJAX)
- 特征:访问有UI页面URL,不能获取数据。需要抓取新的请求获取数据
有些网页内容使用AJAX加载,而AJAX一般返回的是JSON,直接对AJAX地址进行post或get,就返回JSON数据了。
直接用最下面的url访问咱们需要的数据即可。例如:
#https://sports.cctv.com/nba/z/hoopchinanba/index.shtml?s=mkhupu
from urllib.request import Request,urlopen
url ='https://api.bilibili.com/x/web-interface/wbi/index/top/feed/rcmd?web_location=1430650&y_num=3&fresh_type=4&feed_version=V_WATCHLATER_PIP_WINDOW3&fresh_idx_1h=5&fetch_row=16&fresh_idx=5&brush=5&homepage_ver=1&ps=12&last_y_num=4&screen=1185-212&seo_info=&last_showlist=av_1853133903,av_1652670674,av_1853167532,av_1703130426,av_1052978868,av_1802950478,ad_5614,av_n_1153089416,av_n_1552867981,av_n_1952603649%3Bav_1352812843,av_1103299382,av_1252675912,av_1352589417,av_1902353568,ad_5637,av_1802297731,av_1602675536,av_1352311029,av_n_1952620978,av_n_1402468978,av_n_1152933882%3Bav_n_1352888828,av_n_1802993293,av_n_1902364274,av_n_1302554582,ad_5637,av_n_1752365028,av_1752567465,av_1902929193,av_1752948491,av_n_1002464500,av_n_1701729541,av_n_1452430483%3Bav_1602375037,av_1453332481,av_1503199126,av_1353064100,ad_5637,av_1353395847,av_1152673294,av_1002820027,av_1702297552,av_n_1302474701,av_n_1252625695,av_n_1652210309%3Bav_n_1152474521,av_n_1602851132,av_n_1703158101,av_1852487817,ad_5637,av_1602565994,av_1802605723,av_1052594304,av_1203005484,av_n_1253231198,av_n_1953270920,av_n_1603037410&uniq_id=176428302650&w_rid=e29f599db7b0ece8ca6aa6e69ebe27a9&wts=1713839011'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'}
req = Request(url,headers = headers)
resp = urlopen(req)
print(resp.read().decode())
'''
静态
访问地址栏里的数据就可以获取到想要的数据。
动态
访问地址栏里的数据就可以获取不到想要的数据。
解决方案:抓包
打开浏览器的开发者工具-network-xhr,找到可以获取到数据的url访问即可
'''