网络爬虫笔记—Ajax数据抓取

网络爬虫笔记—Ajax数据抓取

有时我们向某一网站发起请求时,会发现该网站返回的内容和网页中显示的不一样。即在网页中可以正常显示,但通过网络爬虫技术,却不可以获取网页上显示的内容。这时网页可能不是静态网页,而是运用Ajax进行渲染的网页。下面以原书作者的微博内容抓取为例:

正常情况下通过向上述图片中的URL地址(https://www.weibo.com/2830678474) ,发起请求,便可以获取微博的第一条内容。下面来看一下实际运行情况。

import requests
url = 'https://www.weibo.com/2830678474'#w微博的URL地址
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.26',  
}#设置请求头
response = requests.get(url, headers=headers)#发起请求
print(response.text)#返回的请求内容

由于返回内容较多,这里就不展示出来,大家可以实际运行看一下,在返回内容里面是没有“寄了啊”这些内容信息的。

这是因为微博的内容是动态加载的,而且使用的是Ajax请求。这时浏览网页的URL地址并不是实际地址,接下来就变成了如何查找正确URL地址的问题。针对URL地址的查找,可以通过下面的方法来查找。

目标URL地址的查找方法

方法1:

首先,打开上述网页,在网页空白处单击右键,然后选择【检查】调出开发者工具;之后按照下图的步骤进行操作:

点击进去后,可以看到该链接的标头等信息。

方法2:


通过上面的步骤就可以找到微博内容正确的URL地址,然后向该地址发送请求,便可以正常获取内容了。下面看一下实际运行结果。

import requests  
url="https://www.weibo.com/ajax/statuses/mymblog?uid=2830678474&page=1&feature=0"#ajax的正确请求地址
headers = {
    "authority":"www.weibo.com",#网页端的authority字段前面有一个:号(:authority),实际运行中需要去掉该:号
    "method":"GET",
    "path":"/ajax/statuses/mymblog?uid=2830678474&page=1&feature=0",
    "scheme": "https",
    "accept": "application/json, text/plain, */*",
    "accept-encoding": "gzip, deflate, br",
    "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
    "client-version": "v2.36.14",
    "cookie": "UOR=www.baidu.com...",
    "referer": "https://www.weibo.com/2830678474",
    "sec-ch-ua": "'Microsoft Edge';v='107', 'Chromium';v='107', 'Not=A?Brand';v='24'",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "Windows",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin",
    "server-version": "v2022.11.03.1",
    "traceparent": "00-3510f55fc64c53dde7b5e0d1e638ffe9-8af10fec367ec4c6-00",
    "user-agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.35",
    "x-requested-with": "XMLHttpRequest",
    "x-xsrf-token": "hvhCFVwWluphipcsxJqBPYsK"
}#请求头,最好将网页全部请求头复制进来,提高爬取成功率。
response = requests.get(url, headers=headers)  
print(response.json())#返回的内容为json格式,所以可以用json方法进行解析

由于返回内容较多,这里也不进行展示了。

关于请求头的设置:

设置请求头时,最好将URL的请求头的全部内容粘贴到headers中,这样抓取的成功率会更高。上述代码中cookie字段进行了简写,大家在实际抓取过程中,可以替换成自己的cookie。网页请求头的查看方法如下图:

  • 本文,主要根据崔庆才的《Python3网络爬虫开发实战》文章,编写的学习笔记。目前该文章的内容已在github上公开。点击此处查看公开内容。
  • 另,本篇笔记首先在微信公众号“宏蜘蛛”上发布,链接为:网络爬虫笔记—Ajax数据抓取

参考资料:

《Python3网络爬虫开发实战》_崔庆才

—End—

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值