python 爬取掘金网

950 阅读1分钟

**学习爬虫有一段时间了,发现掘金上有好多的好文章,所以注册个号也来码码文章,与大家交流

  1. 打开想要爬取的页面:链接:juejin.cn/user/430664…,目的是简单的爬取上面的文章标题

  2. 在浏览器的检查页面后发现,HTML内根本没有我想要的内容,说明网页作了反爬, 通过观察"network"选项卡后发现如下的XHR数据包 这个数据包是post包,它不是简单的表单上传,而是payload类型,返回json格式的数据 , 而我们要的文章标题就在这个json包的data 里面。

  3. 知道了这些后,查看request URL可得到真实的URL地址为:apinew.juejin.im/content_api…

  4. 编写代码如下:

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()

  1. 运行代码结果为 发现data区是无效的, 其原因是 pay_load我们定义的是字典类型,如果我们post的是一般的表单数据,这没有问题,但是如果是payload报文,则要定义为json字符串, 因此上述代码中要改为:pay_load = '{"user_id": "430664290669198","sort_type": 2}' 重新运行程序: 从结果可以看到文章的标题已经获得