**学习爬虫有一段时间了,发现掘金上有好多的好文章,所以注册个号也来码码文章,与大家交流
-
打开想要爬取的页面:链接:juejin.cn/user/430664…,目的是简单的爬取上面的文章标题
-
在浏览器的检查页面后发现,HTML内根本没有我想要的内容,说明网页作了反爬, 通过观察"network"选项卡后发现如下的XHR数据包
这个数据包是post包,它不是简单的表单上传,而是payload类型,返回json格式的数据
, 而我们要的文章标题就在这个json包的data 里面。
-
知道了这些后,查看request URL可得到真实的URL地址为:apinew.juejin.im/content_api…
-
编写代码如下:
import requests
url = 'https://apinew.juejin.im/content_api/v1/article/query_list'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
'Referer': 'https://juejin.cn/user/430664290669198',
'Content-Type': 'application/json',
}
pay_load = {"user_id": "430664290669198","sort_type": 2}
def main():
response = requests.post(url, headers=headers, data=pay_load)
print(response.text)
if __name__ == '__main__':
main()
- 运行代码结果为
发现data区是无效的, 其原因是 pay_load我们定义的是字典类型,如果我们post的是一般的表单数据,这没有问题,但是如果是payload报文,则要定义为json字符串, 因此上述代码中要改为:pay_load = '{"user_id": "430664290669198","sort_type": 2}' 重新运行程序:
从结果可以看到文章的标题已经获得