浏览器抓取网页( 【】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')

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线