浏览器抓取网页( 【】1.4、Chromedriver存放位置、下载对应的谷歌)
优采云 发布时间: 2022-03-18 10:00浏览器抓取网页(
【】1.4、Chromedriver存放位置、下载对应的谷歌)
1.3、下载对应的Google Drive:
点击进入
然后转到它并选择与chrome对应的版本。(比如我的chrome是85开头的,那么就从这么多85中选一个)
点击85开头的链接后跳转到新页面:不管你的Windows是32位还是64位,都只能下载win32.zip
1.4、Chromedriver存放位置
①先按win+r,输入cmd,进入cmd界面
② 输入 where python 可以看到python的安装路径
③打开这个python36(你可能是37版本或者其他版本,没关系)文件夹(可以把这个路径复制粘贴到文件夹上面)
④ 进入该文件夹后,我们可以看到scripts文件夹,将刚才下载的Chromedriver解压到scripts文件夹中。
Mac系统:
1、安装硒:
打开Mac终端终端并输入命令:
pip3 安装硒
如果出现读取超时错误,请复制并粘贴以下命令进行安装:
pip3 安装 -i 硒
2、安装谷歌浏览器驱动:
打开Mac终端终端并输入命令:
卷曲-s | 重击
只需等待程序安装完成。
安装mac终端时,需要输入用户密码。输入密码的时候是不显示的,实际上是在输入的,所以输入密码后按回车键开始安装。
其他方法:
二硒使用详解:
**本地 Chrome 设置:**两种方法:
2.1、可视模式 from selenium import webdriver #从selenium库中调用webdriver模块
driver = webdriver.Chrome() # 将引擎设置为 Chrome 并实际打开 Chrome 浏览器
2.2、浏览器设置为静默模式,也就是说浏览器只在后台运行,在电脑上没有打开它的可视化界面。
from selenium import webdriver #调用selenium库中的webdriver模块
from selenium.webdriver.chrome.options import Options # 从 options 模块调用 Options 类
chrome_options = Options() # 实例化Option对象
chrome_options.add_argument('–headless') # 设置Chrome浏览器为静默模式
driver = webdriver.Chrome(options = chrome_options) # 设置引擎为Chrome,后台静默运行
三、Selenium 获取数据的方法:.get('URL') 3.1、Selenium 解析提取数据的方法
selenium 解析提取的是 Elements 中的所有数据,BeautifulSoup 解析的只是网络中第 0 个请求的响应。
从 selenium 中提取数据的示例:
# 以下方法都可以从网页中提取出'你好,蜘蛛侠!'这段文字
find_element_by_tag_name:通过元素的名称选择
# 如你好,蜘蛛侠!
# 可以使用find_element_by_tag_name('h1')
find_element_by_class_name:通过元素的class属性选择
# 如你好,蜘蛛侠!
# 可以使用find_element_by_class_name('title')
find_element_by_id:通过元素的id选择
# 如你好,蜘蛛侠!
# 可以使用find_element_by_id('title')
find_element_by_name:通过元素的name属性选择
# 如你好,蜘蛛侠!
# 可以使用find_element_by_name('hello')
#以下两个方法可以提取出超链接
find_element_by_link_text:通过链接文本获取超链接
# 如你好,蜘蛛侠!
# 可以使用find_element_by_link_text('你好,蜘蛛侠!')
find_element_by_partial_link_text:通过链接的部分文本获取超链接
# 如你好,蜘蛛侠!
# 可以使用find_element_by_partial_link_text('你好')
示例代码:
# 教学系统的浏览器设置方法
from selenium.webdriver.chrome.webdriver import RemoteWebDriver # 从selenium库中调用RemoteWebDriver模块
from selenium.webdriver.chrome.options import Options # 从options模块中调用Options类
import time
chrome_options = Options() # 实例化Option对象
chrome_options.add_argument('--headless') # 对浏览器的设置
driver = RemoteWebDriver("http://chromedriver.python-class-fos.svc:4444/wd/hub", chrome_options.to_capabilities()) # 声明浏览器对象
driver.get('https://localprod.pandateacher.com/python-manuscript/hello-spiderman/') # 访问页面
time.sleep(2) # 等待2秒
label = driver.find_element_by_tag_name('label') # 解析网页并提取第一个标签中的文字
print(type(label)) # 打印label的数据类型
print(label.text) # 打印label的文本
print(label) # 打印label
driver.close() # 关闭浏览器
提取的数据属于 WebElement 类对象。如果您直接打印它,它将返回其描述的字符串。
与 BeautifulSoup 中的 Tag 对象类似,它也有一个属性 .text,可以将提取的元素以字符串格式显示。
WebElement类对象和Tag对象类似,它也有一个可以通过属性名提取属性值的方法,这个方法是.get_attribute()
例子:
label = driver.find_element_by_class_name('teacher') # 按类名查找元素
print(type(label)) # 打印标签的数据类型
print(label.get_attribute('type')) # 获取属性类型的值,其中'type'是属性的名称,获取的是它的值。
driver.close() # 关闭浏览器
我们可以得出结论,在 selenium 解析和提取数据的过程中,我们操作的对象变换:
3.2、以上方法都是在网页中提取第一个满足要求的数据。接下来,我们来看看提取多个元素的方法。
方法是将刚才的元素替换为多个元素。
元素(复数)提取一个列表,. 列表的内容就是WebElements对象,这些符号就是对象的描述,需要用.text来返回它的文本内容。
3. 3、使用 BeautifulSoup 解析和提取数据
除了用selenium解析提取数据,还有一种解决方案,就是用selenium获取网页,然后交给BeautifulSoup解析提取。前提是先获取字符串格式的网页源代码。源代码被解析为 BeautifulSoup 对象,然后从中提取数据。
Selenium 只能获取渲染完整网页的源代码。
如何得到它?也是一种使用驱动的方式:page_source。
HTML 源代码字符串 = driver.page_source
获取示例网页源代码:
# 教学系统的浏览器设置方法
from selenium.webdriver.chrome.webdriver import RemoteWebDriver # 从selenium库中调用RemoteWebDriver模块
from selenium.webdriver.chrome.options import Options # 从options模块中调用Options类
import time
chrome_options = Options() # 实例化Option对象
chrome_options.add_argument('--headless') # 对浏览器的设置
driver = RemoteWebDriver("http://chromedriver.python-class-fos.svc:4444/wd/hub", chrome_options.to_capabilities()) # 声明浏览器对象
driver.get('https://localprod.pandateacher.com/python-manuscript/hello-spiderman/') # 访问页面
time.sleep(2) # 等待两秒,等浏览器加缓冲载数据
pageSource = driver.page_source # 获取完整渲染的网页源代码
print(type(pageSource)) # 打印pageSource的类型
print(pageSource) # 打印pageSource
driver.close() # 关闭浏览器
Response 对象是通过 requests.get() 获得的。在交给 BeautifulSoup 解析之前,需要使用 .text 方法将 Response 对象的内容作为字符串返回。
使用 selenium 获得的网页的源代码本身已经是一个字符串。
获取到字符串格式的网页源代码后,就可以使用BeautifulSoup对数据进行解析提取。以下代码省略...
自动操作浏览器,控制浏览器自动输入文字,点击提交,主要是以下2行代码。
.send_keys() # 模拟按键输入,自动填表
.click() # 点击元素
有关详细信息,请参阅本文开头。
除了input和click这两种方法经常配合使用外,还有一个方法.clear(),用于清除元素的内容
如果空格打错了,如果要改成其他内容,需要先用.clear()清除,再填写新的文字。
四、最后写:
浏览器使用完毕后记得关闭,以免浪费资源,在代码末尾添加一行driver.close()即可。
至此,你应该可以感受到 Selenium 是一个强大的网络数据工具采集。它的优点是简单直观,但当然也有缺点。由于是真实模拟人对浏览器的操作,所以需要等待网页缓冲的时间,爬取大量数据时速度会比较慢。通常,在爬虫项目中,只有在其他方法无法解决或难以解决问题时才使用 selenium。
当然,除了爬虫,selenium 的使用场景还有很多。例如:可以控制网页中图片文件的显示,控制CSS和JavaScript的加载和执行等等。
这里只是一些简单常用的操作。如果想进一步了解,可以查阅 selenium 的官方文档链,目前只有英文版:
你也可以参考这个中文文档:
知识积累:
评论=driver.find_element_by_class_name('js_hot_list').find_elements_by_class_name('js_cmt_li')
不等于:
a=driver.find_element_by_class_name('js_hot_list')
b=driver.find_elements_by_class_name('js_cmt_li')
相当于:
a=driver.find_element_by_class_name('js_hot_list')
b=a.find_elements_by_class_name('js_cmt_li')