无头浏览器
无头浏览器即headless browser,是一种没有界面的浏览器。既然是浏览器那么浏览器该有的东西它都应该有,只是看不到界面而已。
浏览器内核
早期的无头浏览器多使用phantomjs,用作自动化测试和数据采集。
随着爬虫的欣欣向荣(愈演愈烈),反爬虫的思路逐步清晰起来,复杂的js渲染。
遇到复杂的js 爬虫工程师一般两种思路,分析js,
抽丝剥茧的筛选自己需要的接口
使用js 渲染引擎
无头浏览器便是js 渲染引擎的终极
我拿真是的浏览器来采集你的网站,你还能怎么办。
最初的phantomjs 并不稳定,效率低下
无奈大家选择带有界面的Chrome
后期 Chrome 支持无头模式
selenium 直接弃用了phantomjs
Chrome 无头模式初试
采集网站:http://www.lvmama.com/lvyou/youji/d-xinxilan3597.html’
网站分析: 网站文章列表使用ajax 异步加载
ajax 请求参数复杂,比较难模拟
当然静下心来可以。
鉴于网站数据极少,不值得分析接口,选择渲染页面
代码
from selenium import webdriver
import time
option = webdriver.ChromeOptions()
option.add_argument('headless')
option.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=option)
#driver = webdriver.Chrome()
#driver = webdriver.PhantomJS()
driver.get('http://www.lvmama.com/lvyou/youji/d-xinxilan3597.html')
print('打开浏览器')
driver.maximize_window()
print(driver.title)
driver.set_window_size(1024,1024)#设定固定大小
for num in range(3,10):
time.sleep(2)
driver.find_element_by_xpath("//*[@class='wy_state_page']/p[1]/a["+str(num)+"]").click()
time.sleep(1)
driver.get_screenshot_as_file("E:\\data\\webmagic\\lvmama\\" + str(num) + "maxheadless.png");
print("Page"+str(num))
urls = driver.find_elements_by_xpath("//*[@class='countryBox']//dl//dt//a")
for url in urls:
print(url.get_attribute("href"))
print('关闭')
driver.quit()
print('测试完成')
- 使用了Xpath 解析网页
- 使用了driver 解析出a 标签
注意:
- 脚本根目录放置一个Chromewebdriver
- 适当设置等待时间,保证网页渲染完成
- Chrome 版本和webDriver 版本对应