我心中的王者:Python-第22章 Selenium网络爬虫的王者
在21-2-5小节笔者有介绍有些网页服务器会阻挡网络爬虫读取网页内容,我们可以使用headers的定义将爬虫程序伪装成浏览器,这样我们克服了读取网页内容的障碍。
Selenium功能可以控制浏览器,所以当使用Selenium当爬虫工具时,网络服务器会认为来读取数据的是浏览器,所以不会有被阻挡无法读取网页HTML原始文件的问题。当然Selenium功能不仅如此,可以使用它单击链接,填写登录信息,甚至订票系统、抢购系统等。
22-1 顺利使用Selenium工具前的安装工作
如果想要在Windows系统内顺利使用Selenium执行工作,必须安装下列3项工具以及一个设定。
① Selenium工具。
②浏览器,使用Selenium市面上最常见是安装Firefox,也可以是Chrome或IE,本书将以Firefox为主要说明。另外,也会说明安装Chrome方式。
③ 驱动程序,这是指Selenium驱动浏览器的程序,其实这部分信息很重要,但是目前极少文件有说明,因此常造成读者学习上的障碍。因为依照一般说明,结果是错误信息。
22-1-1 安装Selenium
这个部分相对单纯,可以使用下列方式安装Selenium:
pip install selenium
未来程序的导入稍微不一样,如下所示:
from selenium import webdriver
22-1-2 安装浏览器
这部分也相对单纯,可以至https://www.mozilla.org网页下载Firefox:
22-1-3 错误的实例
目前许多文件书写安装完上述2项后,就可以使用Selenium设计网络爬虫程序了,下列是普遍书写的第一个Selenium程序。
程序实例ch22_1.py:建立Firefox浏览器对象,然后列出这个对象的数据类型,有关程序的细节说明,笔者将在22-2节解说。
# ch22_1.py
from selenium import webdriver
browser = webdriver.Firefox()
print(type(browser))
执行结果 注意,以下是Windows操作系统的执行结果。

据说上述程序在Linux系统上可正常执行。
不过以上是笔者使用Windows操作系统的结果,错误原因是指geckodriver的驱动程序不在PATH路径内,所以产生错误。
22-1-4 驱动程序的安装
驱动程序的安装分成下列步骤:
①安装驱动程序与解压缩。
②将驱动程序放在PATH路径内。
③将驱动程序路径放在Python程序内。
22-1-4-1以Firefox为实例

目前绝大部分的用户皆是使用Python + Selenium驱动Firefox浏览器,这时需要的驱动程序是geckodriver.exe,这个程序可以至github.com下载。
窗口往下拉可以看到不同版本与适用不同的操作系统信息。

v是版本信息,右边是适用操作系统的说明,由上述Windows操作系统信息可知,所下载的文件是压缩文件zip,因此压缩后需解压缩,读者可以自行依环境选择。
笔者将上述解压缩之后的geckodriver.exe放在D:/geckodriver内,未来只要将这个文件路径配合参数设定放在webdriver.Firefox( )内,就可以正确执行了。
22-1-4-2以Chrome为实例
如果要使用Python + Selenium驱动Chrome浏览器,这时需要的驱动程序是chromedriver.exe,这个程序可以至下列网址下载。
这个文件下载后不用解压缩,笔者将上述解压缩之后的chromedriver.exe放在D:/gekodriver内,未来只要将这个文件路径配合参数设定放在webdriver.Chrome( )内,就可以正确执行了。
22-2 获得webdriver的对象类型
使用Selenium的第一步是获得webdriver对象。
22-2-1 以Firefox浏览器为实例
程序实例ch22_2.py:列出webdriver对象类型。
from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.firefox.options import Options
# 指定 geckodriver 的路径
driverPath = 'D:\\geckodriver\\geckodriver.exe'
# 指定 Firefox 浏览器的路径(如果需要)
firefox_binary_path = 'C:\\Program Files\\Mozilla Firefox\\firefox.exe' # 根据你的实际路径修改
# 创建 Firefox 的选项对象
options = Options()
options.binary_location = firefox_binary_path
# 创建 Service 对象,并设置日志输出
service = Service(executable_path=driverPath, log_output=None) # 可以设置为一个文件路径来保存日志
# 启动 Firefox 浏览器
browser = webdriver.Firefox(service=service, options=options)
# 打印浏览器对象的类型
print(type(browser))
执行结果
<class 'selenium.webdriver.firefox.webdriver.WebDriver'>
这个程序在执行时,屏幕将出现D:\geckodriver\geckodriver.exe窗口,读者可以不用理会。接着会启动Firefox窗口,因为我们没有设定找寻任何网页,所以窗口是空白。不过,在Python Shell窗口可以看到程序的执行结果。
上述程序的重点是第5行,笔者将参数“executable_path=driverPath”当作参数设在webdriver.Firefox( )内,dirverPath主要是设定驱动程序的位置,在第4行设定。最后程序打印出了变量browser的对象类型。
22-2-2 以Chrome浏览器为实例
程序实例ch22_3.py:列出webdriver对象类型。
from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.firefox.options import Options
# 指定 geckodriver 的路径
driverPath = 'D:\\geckodriver\\geckodriver.exe' # 确保路径和驱动器名称正确
# 创建 Firefox 的选项对象
options = Options()
# 指定 Firefox 的二进制路径(如果非默认路径)
options.binary_location = 'C:\\Program Files\\Mozilla Firefox\\firefox.exe' # 替换为实际的 Firefox 安装路径
# 创建 Service 对象
service = Service(executable_path=driverPath, log_output='geckodriver.log')
# 启动 Firefox 浏览器
browser = webdriver.Firefox(service=service, options=options)
# 打印浏览器对象的类型
print(type(browser))
执行结果
<class 'selenium.webdriver.firefox.webdriver.WebDriver'>
这个程序在执行时,屏幕将出现D:\geckodriver\chromedriver.exe(这是笔者放置chromedriver.exe的文件路径)窗口,读者可以不必理会。接着会启动Chrome窗口,因为我们没有设定找寻任何网页,所以窗口是空白。不过,在Python Shell窗口可以看到程序的执行结果。
上述程序的重点是第5行,笔者将参数“driverPath”当作参数设在webdriver.Chrome( )内,dirverPath主要是设定驱动程序的文件路径,在第4行设定。最后程序打印出了变量browser的对象类型。
22-3 提取网页
获得browser对象后,可以使用get( )让浏览器连上网页。
程序实例ch22_4.py:让浏览器连上网页与打印页标题。
from selenium import webdriver
from selenium.webdriver<

最低0.47元/天 解锁文章
1423

被折叠的 条评论
为什么被折叠?



