Python使用Selenium + PhantomJS抓取动态网页:今日头条

本文介绍了如何使用Python结合Selenium和PhantomJS抓取动态加载的今日头条新闻。在过程中,需要安装PhantomJS、lxml和Selenium库。由于今日头条页面元素属性不固定,同时考虑http和https链接。通过比较发布时间和本地时间过滤当日新闻,利用Selenium的选择器抓取正文,使用BeautifulSoup获取评论。最后,新闻和评论存储到MongoDB数据库。
摘要由CSDN通过智能技术生成

下载安装PhantomJS,这是一个无界浏览器,不能使用pip安装,以及安装lxml库,Selenium库。另外BeautifulSoup库和Selenium自带的css选择器也想用用看。

#coding:utf8
#python27
import re
from selenium import webdriver
import time
from lxml.html import fromstring

class Toutiao():
    links = []

首先是获取今日头条指定栏目下的新闻链接

class Toutiao():
    #省略...
    def getLinks(self,url):
        #调试时可以使用火狐浏览器,需事先下载火狐的驱动
        #driver = webdriver.Firefox(executable_path=r'C:\Python27\geckodriver.exe')
        driver = webdriver.PhantomJS()  
        driver.get(url)
        #设置隐式等待,最多等待10s
        driver.implicitly_wait(5) 
        for i in range(2):
            #设置下拉次数模拟下拉滚动条加载网页
            driver.execute_script("window.scrollBy(0,700)")
            driver.implicitly_wait(2)
        #将网页源码保存
        html = driver.page_source
        #一定要关闭
        driver.close()
        tree = fromstring(html)

另外,在爬取的时候,发现今日头条网站页面的元素属性并不是固定的,而且链接也不总是http,有时候是https,因此需要两者都考虑到。

    def getLinks(self,url):
        #省略...
        try:
            list = tree.xpath('//a[@class="link"]/@href')
        except:
            list = tree.xpath('//a[@class="link title"]/@href')
        for i in list:
            #需将抓到的链接拼接完全
            link = 'http://www.toutiao.com' + i
            print 'Get link:',link
            self.links.append(link)

看一下抓到的链接:

if __name__=='__main__':
    Toutiao().getLinks('http://www.toutiao.com/')

这里写图片描述
接下来自然是抓取新闻页面的内容了。我们只需要今日头条自己的新闻,并且是本日的新闻,今日头条里面有一部分是视频新闻,还有一些是其他网站的新闻,因此我们需要做一个过滤。
这里写图片描述
时间上的过滤方法:将网页中的发布时间抓取下来与本地时间做一个对比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值