Python爬虫之selenium+chrome实现动态页面爬取
本文主要介绍python+selenium+chromedriver的组合运用,实现浏览器爬虫。
1.Selenium的介绍
Selenium是一个用于web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Edge,Mozilla Firefox,Safari,Google Chrome,Opera等。
Selenium诞生于2004年,经过发展成为了一个庞大的工具集。
- Selenium 2 (又叫 Selenium Webdriver)
WebDriver 是一个进行 web 应用测试自动化的工具,直接通过浏览器自动化的本地接口来调用浏览器,主要用于验证它们的行为是否符合期望。WebDriver提供了一套简单方便的API,使用户能够快捷地运用这些API测试Web应用。 - Selenium 1 (又叫 Selenium RC 或 Remote Control)
Selenium RC在很长一段时间内都是Selenium项目中的主角,直到Selenium WebDriver的出现。Selenium RC支持几乎所有的浏览器,并且支持这些浏览器的工作原理都是一样的,它将 JavaScript 在浏览器加载的时候注入浏览器,然后使用这些 JavaScript 驱动AUT(测试中的应用)运行。 - Selenium IDE
Selenium IDE(集成开发环境)是Selenium Suite下的开源Web自动化测试工具。 与Selenium WebDriver和RC不同,它不需要任何编程逻辑来编写其测试脚本,而只需记录与浏览器的交互以创建测试用例。 - Selenium-Grid
Selenium-Grid 允许你在多台机器的多个浏览器上并行的进行测试,也就是说,你可以同时运 行多个测试。本质上来说就是,Selenium-Grid 支持分布式的测试执行。它可以让你的测试在 一个分布式的执行环境中运行。
Selenium Python提供了一个简单的API,可以使用Selenium WebDriver编写功能/验收测试。通过Selenium Python API可以访问Selenium WebDriver的所有功能。
2.工具安装
(1)selenium安装
pip install selenium
(2)chromedriver安装
下载地址:chromedriver存储库
选择与本机Chrome浏览器相对应的版本,下载解压,将chromedriver复制到Chrome浏览器安装路径下。
3.编写代码,调用chromedriver
# 导入工具包
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
import time
#创建浏览器对象
driver = webdriver.Chrome(r'D:\应用程序\chrome\chromedriver.exe')
driver.get("https://www.toutiao.com") #访问头条
结果如下:
4.示例:爬取头条热点新闻标题
# 爬取今日头条热点新闻标题
from selenium import webdriver
import time
# 启动浏览器
url='https://www.toutiao.com'
driver=webdriver.webdriver.Chrome(r'D:\应用程序\chrome\chromedriver.exe')
driver.get(url)
driver.implicitly_wait(10)
driver.maximize_window() # 最大化窗口
driver.implicitly_wait(10)
driver.find_element_by_link_text('热点').click() # 点击热点
driver.implicitly_wait(10)
title_list=[]
def toutiao(): # 获取新闻标题
titles= driver.find_elements_by_xpath('//div[@class="title-box"]/a')
for title in titles:
title_list.append(title.text)
def scoll(): # 滚动页面
driver.execute_script("window.scrollTo(0,1000);")
time.sleep(1)
while len(title_list) < 20:
for i in range(10):
driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")
time.sleep(3)
toutiao() # 爬取新闻
driver.refresh()
else:
driver.close()
#运行scoll函数
scoll()
print(title_list) #输出结果
结果如下:
5.总结
通过上面的演示,我们基本对python + selenium + chromedriver的使用有了一个初步的认识。当然在安装和调试selenium、chromedriver的过程中可能会存在各种各样的Bug,对于这些问题,可以到网上去搜索寻找答案。同一个问题可能会有不同的原因,但大部分原因前人也都遇到过,借鉴别人的经验尤为重要。