下载安装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/')
接下来自然是抓取新闻页面的内容了。我们只需要今日头条自己的新闻,并且是本日的新闻,今日头条里面有一部分是视频新闻,还有一些是其他网站的新闻,因此我们需要做一个过滤。
时间上的过滤方法:将网页中的发布时间抓取下来与本地时间做一个对比