Python爬虫之selenium+chrome实现动态抓取

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年,经过发展成为了一个庞大的工具集。

  1. Selenium 2 (又叫 Selenium Webdriver)
    WebDriver 是一个进行 web 应用测试自动化的工具,直接通过浏览器自动化的本地接口来调用浏览器,主要用于验证它们的行为是否符合期望。WebDriver提供了一套简单方便的API,使用户能够快捷地运用这些API测试Web应用。
  2. Selenium 1 (又叫 Selenium RC 或 Remote Control)
    Selenium RC在很长一段时间内都是Selenium项目中的主角,直到Selenium WebDriver的出现。Selenium RC支持几乎所有的浏览器,并且支持这些浏览器的工作原理都是一样的,它将 JavaScript 在浏览器加载的时候注入浏览器,然后使用这些 JavaScript 驱动AUT(测试中的应用)运行。
  3. Selenium IDE
    Selenium IDE(集成开发环境)是Selenium Suite下的开源Web自动化测试工具。 与Selenium WebDriver和RC不同,它不需要任何编程逻辑来编写其测试脚本,而只需记录与浏览器的交互以创建测试用例。
  4. 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存储库
Python爬虫之selenium+chrome实现动态抓取_第1张图片
选择与本机Chrome浏览器相对应的版本,下载解压,将chromedriver复制到Chrome浏览器安装路径下。
Python爬虫之selenium+chrome实现动态抓取_第2张图片

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") #访问头条

结果如下:
Python爬虫之selenium+chrome实现动态抓取_第3张图片

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) #输出结果

结果如下:
Python爬虫之selenium+chrome实现动态抓取_第4张图片

5.总结

通过上面的演示,我们基本对python + selenium + chromedriver的使用有了一个初步的认识。当然在安装和调试selenium、chromedriver的过程中可能会存在各种各样的Bug,对于这些问题,可以到网上去搜索寻找答案。同一个问题可能会有不同的原因,但大部分原因前人也都遇到过,借鉴别人的经验尤为重要。

你可能感兴趣的:(Python爬虫之selenium+chrome实现动态抓取)