本篇文章预计阅读需8分钟今天给大家带来的文章是作者学完爬虫后写的一个Demo,作者是个詹密,平时主要逛逛虎扑。所以就想着抓些NBA新闻来看看。如果有抓过今日头条新闻的读者肯定知道今日头条的新闻内容是通过Ajax加载。不同于一般的静态页面。所以今天作者也就专门的这一类的网站写一篇技术心得。废话不多说。我们开始进入正题吧。
作者在这里是用Selenium模拟浏览器运行的方式来实现。使用Selenium抓取页面的的好处用一句话来概括就是:可见即可爬。即我们就不用去管网页内部具体的渲染页面。我们需要安装好Selenium库和Chrome浏览器以及ChromeDriver。解析库BeautifulSoup。数据抓取下来后我们可以保存到数据库中,也可以以文件的方式保存。
在抓取之前,首先要分析抓取的逻辑。我们打开今日头条的NBA版块 https://www.toutiao.com/ch/nba/,如下图所示。
我们把鼠标的光标定在任意一篇新闻标题上,右键检查,打开开发者工具,可以看到新闻的标题和链接都在class标签为“link title”里如下图所示。
点击此文章的链接,即可跳转到此文章的详细页面。然后我们打开开发者工具。就可以提取新闻的标题,作者,来源,内容等一些我们想要的信息了。如下图所示。
刚刚我们分析了网页的逻辑,那么现在我们就用程序来实现今日头条NBA新闻的抓取吧。
首先我们要拿到当前页面的每篇新闻的链接,代码如下。
拿到每篇文章的链接后,我们就可以访问它,获得我们想要的信息了,实现如下。
最后把抓取到的新闻保存到数据库。相关代码如下。
好了,到这里我们已经把我们想要的新闻抓取下来了,可是还有一个问题。因为今日头条是Ajax加载页面。所以我们不可能通过修改页数来获取更多的新闻。我们只能获得当前我们访问页面显示的新闻。那么如果我们想获得更多的新闻。应该怎么办呢。作者在这里用了一个模拟鼠标拖动的方法,以此来解决我们想获得更多内容的窘境。代码如下。
到此,我们这个程序才算完成。现在来看看最终保存在数据库的结果吧。
最后,我们给出了本节的代码地址:https://github.com/NGUWQ/Python3Spider/tree/master/toutiao
如果有想进一步挑战的读者可以在完成本项目后,可以尝试用Scrapy框架来实现。
参考代码:
https://github.com/NGUWQ/Python3Spider/tree/master/scrapytoutiao
相信如果你看懂了这篇文章,那么Ajax的数据爬取对你来说就很容易了。
If it works for you.Please,star.
如果你对爬虫,数据分析,算法感兴趣。请关注我的微信公众号:TWcoding。我们一起学习。