'''
静态:访问地址栏里的数据就可以获取到想要的数据
动态:访问地址栏里的数据获取不到想要的数据
解决方案:抓包
打开浏览器的开发者工具-network-xhr,找到可以获取到数据的URL访问即可
'''
获取url地址
代码实现:
from urllib.request import Request,urlopen
from fake_useragent import UserAgent
url ='https://www.hupu.com/home/v1/news?pageNo=2&pageSize=50'
headers ={
'User-Agent':UserAgent().chrome
}
req = Request(url,headers=headers)
resp = urlopen(req)
print(resp.read().decode())
执行结果:
问题:requests抓取的页面信息和浏览器中看到的不一样。
原因:requests获取的都是原始的HTML文档,浏览器中的页面很多都是经过javascript数据处理后的结果,这些数据可能通过AJax加载的,也可能是通过其他特定算法计算得到的
解决:对于通过Ajax加载的,叫异步加载,这种可以在web开发上做到前后端分离,降低服务器直接渲染页面带来的压力,如果遇到requests无法获取有效数据,需要进一步分析网页后台向接口发送的Ajax请求,然后用requests来模拟Ajax请求,就可以成功获取了
from urllib.request import Request,urlopen
from fake_useragent import UserAgent
url="https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=0&limit=20"
for i in range(10000):
headers ={
"User-Agent":UserAgent().chrome
}
url = url.format(i*20)
request = Request(url,headers=headers)
response = urlopen(request)
info = response.read().decode()
print(info)
if info is None or info=="":
break