python爬虫怎么获取network中的链接_Python爬虫(05): 简书文章阅读量分析(案例教程)...

f9fc6f0d89c86fc632e16d925345f7e6.gif

前四篇回顾请戳下面链接:

  • Python爬虫(01): 零基础十分钟上手

  • Python爬虫(02): 伪装浏览器爬取Boss直聘网页数据

  • Python爬虫(03): 二级网页

  • Python爬虫(04): JS动态生成数据

以前在简书发了一些文章,涉及的分类特别杂乱,有TensorFlow的,有Web开发的,还有一些小学生编程教程和绘图设计教程...最近又在做人工智能通识专题和智能决策系列教程的文章。

这些天很多简友关注我,但我很迷茫,并不知道哪些文章最受大家重视,对大家更有用些,而简书也没有这方面的统计功能开放给作者们使用。

我就想能不能自己把这些变化数据抓取下来,自己分析一下,于是就开动写这个案例教程了。

这个教程推荐使用Chrome浏览器和Jupyter Notebook编辑器。Notebook的安装请参照Anaconda使用说明

1. 有哪些数据可以获取?

从自己的文章列表页面可以看到总体【关注数】和每篇文章的【观看数】都是直接获取的,我们只要汇总每天哪些文章观看数增加了,再对比粉丝数的变化,就能知道哪些文章引发的关注最多

306733e717c6554703843737051ae74a.png

因为目测我的文章每天总阅读量的增加数,和每天粉丝的增加数相差不太大,也就是说,大部分阅读都引发了被关注,所以两者之间是强关联的。 

如果不是这样,比如每天增加阅读1万,粉丝增加100,那就不好说了,因为可能A文章被观看100次都引发了被关注,而B文章被观看了9000次却没有引发一个被关注,那么就没办法从单个文章阅读量上分析粉丝变化,也就猜不出哪些文章更受喜欢。

2. 爬虫数据是在html里还是在动态json请求里?

首先我们要知道页面上这些数据是怎么来的,是直接html标签显示的?还是通过JavaScript动态填充的?请参阅系列教程的前4节。

我们的套路:

  1. 右键【显示网页源代码】,打开的就是浏览器地址栏里面的地址请求直接从服务器拉取到的html数据,如果这里可以Ctrl+F搜索到需要的数据(比如可以搜到“人工智能通识-AI发展简史-讲义全篇”),那么用最简单的html数据提取就可以。

  2. 如果上面一个办法搜不到,那就右键【检查元素】,然后查看Network面板里面type为xhr的请求,点击每一个,看哪个Response里面可以Ctrl+F搜到我们需要的数据。(很多时候可以从请求的英文名字里面猜个八九不离十)

在这个案例里,我们需要的数据看上去就在网页源代码里面,暂且是这样。

931ba35824a0bcc1b24679717eb977b7.png

3. 怎么用header和params模拟浏览器?

为了不让网站的服务器知道我们是爬虫,就还要像浏览器一样发送附加的额外信息,就是header和params。

我们右键【检查】,然后切换到【Network】网络面板,然后刷新网页,我们会看到一个和网页地址一致的请求。 如下图,我的主页地址是https://www.jianshu.com/u/ae784c57b353,就看到Network最顶上的是ae784c57b353:

a8fbdfbe54215155c8c659c85c061f0d.png

如果我们切换到请求的Response响应结果面板,就可以看到这个请求获取的实际就是网页源代码。它的type类型是document,也就是html文档。

就是它了,我们需要它的header头信息和params参数。 【右击-Copy-Copy Request Headers】就能复制到这个请求的头信息了。

c97873e380ce3fe27b735083e5feac1b.png

但是,如果你留意,就会发现这个请求的Response结果(也就是网页源代码)并不是包含所有文章,而只是只包含了9个文章。但是如果我们用鼠标往下滚动页面,发现文章就会越来越多的自动添加进来。(右侧的滚动条越变越短)

我们刷新页面重置,然后清空Network网络面板,一点点轻轻往下滚动,直到列表里出现了一个xhr请求:

d250b9ab368bed9c21a85738d3bada6c.png

点击这个请求,可以在Headers里看到它的Parameters参数,其实就是请求名称的问号后面的部分:

42f2bc5e216e4240366f2b119721f36f.png

order_by是排序, page是第几页。所以不是简书文章列表不分页,默认加载的是 page=1,而当你往下滚动的时候自动添加下一页的内容 page=2,page=3...

我们查看它的Response也会发现,它所得到的内容和我们上面的网页源代码格式是一致的:

286b45f61a0a325f086d11dca312657e.png

4. 设定参数

打开Jupyter Notebook,在第一个cell单元编写代码,设定相关参数(headers字段涉及到个人隐私已经被我简化了,你须要在浏览器里面复制自己的):

url = 'https://www.jianshu.com/u/ae784c57b353'

params = { 'order_by': 'shared_at', 'page': '1'}

headers = '''

GET /u/ae784c57b353 HTTP/1.1

Host: www.jianshu.com

Connection: keep-alive

Cache-Control: max-age=0

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

Accept-Encoding: gzip, deflate, br

Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7

Cookie: read_mode=day; default_font=font2; locale=zh-CN;....5b9fb068=1538705012

If-None

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值