帮友人写的一个小作业…

目标是写一个采集新闻标题的爬虫,然后统计标题中某些词汇的出现次数。

因为说希望统计 小米,华为 这类词汇的出现次数,所以我把信息锁定在手机类…

没用 py 写过东西,也没自己写过爬虫…心想作业的话难度应该不大,而且原理大概差不多吧…

**下面是我尝试历程的简单分析,获取腾讯新闻数据的详细步骤请看最下面的“其他”。 **

第一步分析网页。

先尝试今日头条,用的 ajax,不能从 url 分析了。然后找到了接口。

https://www.toutiao.com/api/pc/feed/?category=news_tech&utm_source=toutiao&widen=1&max_behot_time=1529885566&max_behot_time_tmp=1529885566&tadrequire=true&as=A115CBD390DBC19&cp=5B30BBCC1149DE1&_signature=SKf6EAAAE5jSs6RP3-hx0kin-g

这个接口可以直接用,不会出现 forbid 之类的防御,但是翻页的参数有点诡异(百度上有说明),我就放弃了。

然后腾讯新闻。

美滋滋。接口为:

http://pacaio.match.qq.com/irs/rcd?cid=52&token=8f6b50e1667f130c10f981309e1d8200&ext=4101,4104,604&page=1&expIds=20180624A0X69P|20180624A0WEN3|20180624A0UU3Y|20180624A0HH3V|20180624A0OUYY|20180624A0PX0G|20180624A0QDNG|20180623A0XRWW|20180624A0OXYP|20180624A0P9RG|20180624010887|20180624A0O3QI|20180624A0K2NP|20180624A0L1PR|20180624A0JPI9|20180624A0J8ME|20180624A0I8WL|20180624A0HAP6|20180624A0FFU6|20180624A0F4RS&callback=__jp9

直接传 page 就行了。

发现另外有几个参数不传也没啥影响。稍微精简了下。

http://pacaio.match.qq.com/irs/rcd?cid=52&token=8f6b50e1667f130c10f981309e1d8200&ext=4101,4104,604&page=page

这个接口需要设定一下请求头,把浏览器的复制过来就行了…

然后就是传参,获取数据,储存数据…balabala

接口获取的就是 json 格式的数据,处理起来很方便。

爬数据的时候用 sleep 降低了频率(为了避免被限制),实际上好像并不需要(万一呢)…

关于 python

有些关于 python 语法的问题,都注释在代码了。

先用的 2.7 写的,在终端不能打印中文,就换了 3 。然后遇到了一些版本更替后的问题。

哎哟好麻烦哦…

3 和 2 变化挺大的,比如 3 可以直接使用中文词频统计…

vscode 写 python

deepin 自带 python2.7 ,想安装个新版本,可以直接安装 python3,使用的时候用 python3 命令即可。

在 vscode 里单独设置一下采用哪个版本。

终端执行 which python3 ,获取 python3 的安装路径。再在 vscode 的设置里弄上这条,"python.pythonPath": "python3 的安装路径"

注意:在 python3 环境下使用 pip(python 的包管理工具) 时,需要单独给 python3 安装一个 python3-pip

源码

tencent-news-spider-py

其他

我在上面使用了“获取”,而没有用爬取,是因为突然发现利用接口得到数据,好像并不是那么“爬虫”…但是没办法,它数据就是这样来的嘛…

http://new.qq.com/ch2/phone

这是数据来源地址,浏览一下就会发现,加载数据(新闻)的时候网址没有变化。

所以不能使用通常老师在课堂上教的那种改动 url ,正则表达式解析网页的方式来获取数据了…

如果用的话,只能获取第一页的数据…不能请求到后面的数据。

思考:这应该是使用了 ajax,那么也就应该有一个返回 json 格式数据的接口。我们可以通过这个接口获得数据。(经验得出的结论)

审查,网络,找到了返回 json 数据的接口,就是上面那个。

直接访问,被拒绝了,501 。

尝试加上请求头,请求成功,返回的果然是新闻信息。

然后就是从 json 新闻信息里提取自己需要的信息了…

对于只想爬数据的人来说,这里难点应该就只在获取 ajax 动态页面的数据。然后接触到了新的东西,json 格式的数据 …

这真是吃饱了撑的,整些这些莫名其妙的东西…

不过这样子获取数据的效率反而高了啊,,,

之前是把数据渲染到网页,我们再从网页拔下来…现在直接把数据发给了我们,多好…

当然,前提是不像今日头条那样搞些加密…

至于这些网站为什么要这样搞,大概涉及到开发上面的更高更快更强,以及为用户提供更好的体验这两方面。

总之这些网站不是吃饱了撑的,而是因为其他某些原因,使用了这样的方式来展示网页。

所以我们就得使用这样的方式去搞咯…