htmlunit抓取动态网页(selenium模块为第三方模块需要安装的操作软件操作原理)
优采云 发布时间: 2022-02-09 14:04htmlunit抓取动态网页(selenium模块为第三方模块需要安装的操作软件操作原理)
【百度云搜索,搜索各种素材:】【搜索网盘,搜索各种素材:】
硒模块
selenium 模块是需要安装的第三方模块。 selenium模块是一个api接口模块,操作各种浏览器对应的软件
selenium模块是api接口模块,操作各种浏览器对应的软件,所以需要下载浏览器对应的操作软件
工作原理是:selenium模块操作浏览器操作软件,浏览器操作软件操作浏览器
Selenium 2.0 用于以下浏览器
谷歌浏览器
Internet Explorer 7、8、9、10、11
火狐
Safari
歌剧
HtmlUnit
幻影
安卓
iOS
Selenium的核心是用js控制浏览器
下载相应的浏览器操作软件
铬:
边缘:
火狐:
Safari:
我们这里使用 Firefox 作为一栏
首先将火狐浏览器的操作软件geckodriver.exe文件放入爬虫目录
selenium 模块可以模拟用户行为来操作各种版本的浏览器
webdriver.Firefox('操作浏览器软件路径') 实例化Firefox浏览器对象
get('url') 访问网站
find_element_by_xpath('xpath expression') 通过xpath表达式找到对应的元素
clear() 清除输入框内容
send_keys('content')将内容写入输入框
click()点击事件
get_screenshot_as_file('截屏保存路径名') 将网页截图保存到该目录
page_source 获取网页 htnl 源代码
browser.close() 关闭浏览器
#!/usr/bin/env python
# -*- coding:utf8 -*-
from selenium import webdriver # 导入selenium模块来操作浏览器软件
import time
browser = webdriver.Firefox(executable_path='H:/py/16/adc/adc/Firefox/geckodriver.exe')
browser.get('https://www.tmall.com/?spm=a220o.1000855.a2226mz.1.5c90c3484bZCx6')
# 模拟用户操作
browser.find_element_by_xpath('//input[@id="mq"]').clear() # 通过xpath表达式找到输入框,clear()清空输入框里的内容
browser.find_element_by_xpath('//input[@id="mq"]').send_keys('连衣裙') # 通过xpath表达式找到输入框,send_keys()将内容写入输入框
browser.find_element_by_xpath('//button[@type="submit"]').click() # 通过xpath表达式找到搜索按钮,click()点击事件
time.sleep(3) # 等待3秒
browser.get_screenshot_as_file('H:/py/17/img/123.jpg') # 将网页截图,保存到此目录
neir = browser.page_source # 获取网页内容
print(neir)
browser.close() # 关闭浏览器
使用 scrapy 的 Selector 方法。过滤所选数据
Selector()方法,过滤选中的数据,参数为获取的字符串html源码
Selenium 操作浏览器滚动条
execute_script(js)方法,执行原生态js脚本
#!/usr/bin/env python
# -*- coding:utf8 -*-
from selenium import webdriver # 导入selenium模块来操作浏览器软件
import time
from scrapy.selector import Selector
browser = webdriver.Firefox(executable_path='H:/py/16/adc/adc/Firefox/geckodriver.exe')
browser.get('https://www.oschina.net/blog')
time.sleep(3) # 等待3秒
for i in range(3): # 滚动3次滚动条
js = 'window.scrollTo(0,document.body.scrollHeight); var lenofpage=document.body.scrollHeight; return lenofpage'
browser.execute_script(js) # 执行js语言滚动滚动条
time.sleep(3)
neir = browser.page_source # 获取网页内容
# print(neir)
gl_neir = Selector(text=neir)
dedao = gl_neir.css('title::text').extract()
print(dedao)
# browser.close() # 关闭浏览器
设置请求页面不加载图片,提高请求效率
ChromeOptions() 方法,创建谷歌浏览器设置对象
Chrome() 方法,创建谷歌浏览器对象
谷歌浏览器在下面列出
#!/usr/bin/env python
# -*- coding:utf8 -*-
from selenium import webdriver # 导入selenium模块来操作浏览器软件
from scrapy.selector import Selector
#设置请求网页不加载图片,提高请求效率
chrome_options = webdriver.ChromeOptions() #创建谷歌浏览器设置对象
prefs = {"profile.managed_default_content_settings.images": 2} #设置谷歌浏览器不加载图片
chrome_options.add_experimental_option('prefs', prefs) #将不加载图片添加到浏览器
browser = webdriver.Chrome(executable_path='H:/py/16/adc/adc/Firefox/chromedriver.exe', chrome_options=chrome_options)
# browser.set_page_load_timeout(40) #设置页面最长加载时间为40s
browser.get('https://www.taobao.com/')
neir = browser.page_source # 获取网页内容
# print(neir)
gl_neir = Selector(text=neir)
dedao = gl_neir.css('title::text').extract()
print(dedao)
# browser.close() # 关闭浏览器
selenium 模块也可以操作 PhantomJS 浏览器。 PhantomJS是无界面浏览器,比较清爽,但是多线程会降低性能
重要提示:我们建议使用 chromedriver.exe、谷歌浏览器