首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一本正经的胡说八道(四)

有时候我也会写正经的东西

本文略具有专业性,如果你没接触过编程或者web开发,可以关了

最早用python写爬虫,还是几年前,那会流量资费还很贵,我妈还喜欢看小说,又舍不得流量在线看,那会我就编出了一个爬小说的程序,爬下了2个G的小说。

今天就来尝试爬取一下《今日头条》的新闻,当然,本文写的程序实际上是没什么用的,但是我认为可以给你一个写爬虫的思路,无论你用什么语言,无非都是这么回事。

本人写python的环境:pycharm+anaconda+macOS+python3.6

可能会用到的库:

解释一下,re正则表达式模块,time故名思义操作时间的功能模块,urllib是操作url的功能模块,json一目了然是用来解析json数据的。

说明一下为什么爬取《今日头条》,我看了一下几个主流的新闻网站,《网易新闻》和《新浪新闻》都太普通了,一看html就能分析出来了,《今日头条》就比较有意思了,它的内容是用js动态加载进来的,更多的往下看便是。

先来尝试打开《今日头条》的热点新闻

运行一下看一下结果

确实响应回来的是首页的html代码,但是如果你仔细看一遍你会发现,首页的新闻标题都不在这里,这就比较有意思了,接下来我们就要去浏览器上找一下内容在哪里了,这里我用的是safari,各位自行对比:

这是我写文章的时间给我推荐的新闻

接下来我们要打开开发者工具,依次资源->XHR(XmlHttpResponse)

xhr下面是服务器返回的json数据,看一下右面的数据的title,是不是和上一张图片我所截下来的新闻一样,这说明没跑了,这个feed就是我所需要的所有新闻的标题链接等等。所以我们看一下feed的链接,并把代码里的target_url修改一下。

但是发现出现了个问题,执行一下代码发现

数据没有返回,这事为什么呢?其实头条的网站已经做了反爬取的措施,所以接下来我们要伪装一下,我们要写一下请求头,来伪装成浏览器,最简单的方式

把蓝色开头的(除了HOST)都拷贝下来,但是经过我测试,头条并没有反爬取反的那么厉害,我们只要把User-Agent这一段拷贝下来用就可以了。User Agent中文名为用户代理,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言。再来看一下结果。

注意代码修改的地方,一目了然返回的结果已经成功了,接下来就是分析数据了

其实已经很明显了,所有的新闻都放在这个data里,里面是每条新闻的信息,每条里面title就是新闻的标题,source_url(根url)就是这篇新闻点击之后的路径。好的,我们先把这两个关键信息提取出来。最后贴一遍完整代码

看一下结果:

已经成功获取到了信息,但实际上只有第一页的数据,头条的翻页方式也比较有意思,应该是当前主流网站都采用的瀑布流式分页,就是你一直往下划鼠标划不到底,置于如何获取翻页的数据,篇幅限制,我大概会在下一篇里详细来教大家解析,我们暂时就先获取第一页的新闻吧。

实际上光有这些url还不够,直接扔到浏览器上会提示你

这些链接实际是要拼在头条首页后的,比如“/group/6548634863220556301/”要拼写成“https://www.toutiao.com/group/6548634863220556301/”才能够正确的去访问新闻,所以继续写代码,重新组合一下代码,以下的代码都是继续写到上述代码下面的。还有一点,注意看一下上面打印结果,有一条的url是蓝色的,这个是广告,我们不需要的,所以要把它剔除,整理下代码

解释一下,正则表达式不多说,这里主要就是匹配是否有http开头的内容,其次在循环这里加了个时间间隔,因为计算机的运行速度大家都知道,这么频繁的去访问服务器无异于是对服务器攻击,爬取别人的东西本来就不道德了,所以建议大家加个限制,如果你非要速度访问,那也没招,不过我建议你使用代理ip,如果被检测到你攻击服务器,对方是有可能封锁你的ip的。

接下来就是访问新闻链接了,响应的结果一般有两种,一种是重定向到外网站,一般返回的都是html代码,只需要用正则表达式把“

”标签内的内容取出来就好,还有一种就是在《今日头条》上发布的新闻,所以还是一样的尿性,为此我的做法是又写了两个正则表达式,当然有更好的方法,在此不多叙述

返回的如果是html文档,那我只要把p标签的内容全部取出来就好了,对付头条的要使用另外的方法,具体自己去研究吧,这里我偷懒只匹配中文,意思的能懂就好了。接下来开始写文件

好的,去路径下面看一下结果吧

我们在看一下里面的内容

内容都爬取下来了,至于怎么让他有格式,怎么顺便把图片爬取下来,这就是后话了。

这里不是来教你敲代码,只是给你一个写爬虫的思路,你可以去爬取很多东西,比如电影、音乐、图片。不管什么,都是反复的去分析请求和响应以及数据结构。最后再贴一下代码,当然在公司你如果写成这样的代码,你就快离职了,而且维护起来也费劲。

纯手敲,记得点个赞啊。下次我会继续写分页的爬取的。欢迎关注。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180426G1FW5H00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券