这里先介绍一下,我们使用工具selenium和Phantomjs来配合抓取。
安装的话, 直接
pip install -U selenium
而Phantomjs则通过brew来安装,不细说。
brew install phantomjs
选择原因:
Phantomjs是基于webkit的没有界面的浏览器,可以像浏览器一样解析网页,个人感觉的效果比firefox和chrome稍微快些。
selenium是web的自动测试工具,可以模拟人的操作。几乎支持市面上所有的主流浏览器。
来看看代码
1 | #coding:utf-8 |
这里一些概念说明:
1.unittest 单元测试,简单的测试用例。以setup开头,中间测试的方法以test开头,测试完成之后会有一个teardown。
2.斗鱼tv是看直播时较常去的,直接用浏览器打开 斗鱼
网页源码中可以直接看到房间的信息,返回的不是json格式而是html,直接使用phantomjs模拟浏览器的访问过程,通过driver.get方法获取浏览器加载完成后的代码,无论是否是异步,取到的source都是和在浏览器中看到的完全一样!
这里lxml方式有数据丢失,原因未知。。后来尝试了xml无误,暂时不知原因。。
还有对比之前的瓜子和果壳,我们只从中抓取了部分页面。这里抓取全部我们需要加上条件判断,最后一页时斗鱼下一页的标签会变灰,这个时候我们就加上这个跳出循环。
if driver.page_source.find('shark-pager-disable-next') != -1:
break
还有这里
elem = driver.find_element_by_class_name('shark-pager-next')
elem.click()
soup = BeautifulSoup(driver.page_source, 'xml')
第一行代码是webdriver里面带有的定位标签的方法,直接使用class来定位,取到这个控件,
然后执行element的click()方法模拟鼠标的点击,
页面会自动跳到下一页,接着解析网页的源码。
tips
这里加上一点selenium的小操作
编码学习的一个小突破感觉就是不断滴回顾学习吧,有些看完文档之后,觉得是这样没错,可是不久就好像啥也不剩了,在基础阶段模范性学习当中,要不断深化下已经学到的东西,适当做些归纳总结会很好。
填入表单数据
#coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get('https://www.baidu.com/')
elem = driver.find_element_by_id('kw')
elem.send_keys(u'爬虫')
elem.send_keys(Keys.RETURN)
print(driver.page_source)
滚动页面至最下方
#coding:utf-8
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.jianshu.com/collections')
time.sleep(1)
for i in range(10):
dirver.execute_script('window.scrollTo(0,document.body.scrollHeight)')
time.sleep(1)