第三百五十节,Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求

selenium模块

selenium模块为第三方模块需要安装,selenium模块是一个操作各种浏览器对应软件的api接口模块

selenium模块是一个操作各种浏览器对应软件的api接口模块,所以还得需要下载对应浏览器的操作软件

操作原理是:selenium模块操作浏览器操作软件,浏览器操作软件操作浏览器

Selenium 2.0适用于以下浏览器
  Google Chrome
  Internet Explorer 7, 8, 9, 10, 11
  Firefox
  Safari
  Opera
  HtmlUnit
  phantomjs
  Android
  iOS

Selenium 的核心,就是用js控制浏览器

下载对应浏览器的浏览器操作软件

Chrome: https://sites.google.com/a/chromium.org/chromedriver/downloads
Edge: https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
Firefox: https://github.com/mozilla/geckodriver/releases
Safari: https://webkit.org/blog/6900/webdriver-support-in-safari-10/

我们这里以火狐浏览器为列

首先将火狐浏览器的操作软件,geckodriver.exe文件放置到爬虫目录里

selenium模块可以模拟用户行为操作各种版本浏览器

webdriver.Firefox('操作浏览器软件路径')实例化火狐浏览器对象
get('url')访问网站
find_element_by_xpath('xpath表达式')通过xpath表达式找对应元素
clear()清空输入框里的内容
send_keys('内容')将内容写入输入框
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源码

#!/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.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)
gl_neir = Selector(text=neir)
dedao = gl_neir.css('title::text').extract()
print(dedao) browser.close() # 关闭浏览器

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,谷歌浏览器

第三百五十节,Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求的更多相关文章

  1. 二十九 Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求

    selenium模块 selenium模块为第三方模块需要安装,selenium模块是一个操作各种浏览器对应软件的api接口模块 selenium模块是一个操作各种浏览器对应软件的api接口模块,所以 ...

  2. 第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询

    第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询 1.elasticsearch(搜索引擎)的查询 elasticsearch是功能 ...

  3. 第三百五十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)介绍以及安装

    第三百五十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)介绍以及安装 elasticsearch(搜索引擎)介绍 ElasticSearch是一个基于 ...

  4. 第三百五十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点

    第三百五十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点 1.分布式爬虫原理 2.分布式爬虫优点 3.分布式爬虫需要解决的问题

  5. 第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解

    第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解 信号一般使用信号分发器dispatcher.connect(),来设置信号,和信号触发函数,当捕获到信号时执行 ...

  6. 第三百五十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—数据收集(Stats Collection)

    第三百五十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—数据收集(Stats Collection) Scrapy提供了方便的收集数据的机制.数据以key/value方式存储,值大多是计数 ...

  7. 第三百七十节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索结果分页

    第三百七十节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索结果分页 逻辑处理函数 计算搜索耗时 在开始搜索前:start_time ...

  8. 第三百六十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索功能

    第三百六十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索功能 Django实现搜索功能 1.在Django配置搜索结果页的路由映 ...

  9. 第三百六十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的bool组合查询

    第三百六十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的bool组合查询 bool查询说明 filter:[],字段的过滤,不参与打分must:[] ...

随机推荐

  1. [Windows Azure] Administering your Windows Azure AD tenant

    Administering your Windows Azure AD tenant 19 out of 20 rated this helpful - Rate this topic Publish ...

  2. 【教程】ubuntu下配置nvc详细教程

    Preface 虽然以前在windows上远控linux都是用的FTP+CRT,不过有些时候还是不太方便,比如不能用IDE对程序进行调试,现在就来配置下VNC,过程中出了些错误,上网查询时发现很多解决 ...

  3. 【Socket】linux黑客之网络嗅探底层原理

      1.mystery引入 1)网络嗅探属于网络攻防类的安全软件,其基于原始套接字技术开发的 2)原始套接字是一种套接字底层技术,它工作在网络层 3)谈到网络安全,刚好本学期学过这门课程,这里myst ...

  4. angularjs项目的页面跳转如何实现

    链接:https://www.zhihu.com/question/33565135/answer/696515Angular页面传参有多种办法,根据不同用例,我举5种最常见的:PS: 在实际项目中, ...

  5. 【转】解决Lost connection to MySQL server during query错误方法

    初步判断是MySQL可能挂掉了,在系统服务里面查看MySQL的进程并没有停止. 最开始考虑是数据库结构不对,但是我是通过Navicat for MySQL的备份和恢复备份导入数据,应该表结构都在备份文 ...

  6. js实现类似qq表情(插入图片以及获取光标的效果)

    <!doctype html><html style="height:100%"><head><meta charset="ut ...

  7. 【FindReport】图表快速部署开发

    在线帮助文档:http://help.finereport.com/ 开发部署环境:Java Tomcat 数据可视化工具 大屏动态显示

  8. zabbix告警邮件乱码问题

    ZABBIX报警内容:邮件标题正常,内容为乱码:微信报警正常. 曾试图改变环境变量:export LANG=zh_CN.UTF-8 依旧为乱码 原因:export只改变的环境变量 而ZABBIX报警内 ...

  9. 1. DNN神经网络的前向传播(FeedForward)

    1. DNN神经网络的前向传播(FeedForward) 2. DNN神经网络的反向更新(BP) 3. DNN神经网络的正则化 1. 前言 神经网络技术起源于上世纪五.六十年代,当时叫感知机(perc ...

  10. [转]oracle制定定时任务(dbms_jobs)

    原文地址:http://www.cnblogs.com/siashan/p/4183868.html 本节摘要:本节介绍使用oracle自带的job来实现oracle定制定时执行任务.   1.引言 ...