在scrapy中使用selenium的编码流程:

    1.在spider的构造方法中创建一个浏览器对象(作为当前spider的一个属性)2.重写spider的一个方法closed(self,spider),在该方法中执行浏览器关闭的操作3.在下载中间件的process_response方法中,通过spider参数获取浏览器对象4.在中间件的process_response中定制基于浏览器自动化的操作代码(获取动态加载出来的页面源码数据)5.实例化一个响应对象,且将page_source返回的页面源码封装到该对象中6.返回该新的响应对象

需求 在Scrapy框架中使用selenium来实现编程 网易页面

wangyi.py

import scrapy
from selenium import webdriver
# 实例化浏览器可以通过中间件的process_response中的spider来获取
#因此实例化浏览器可以写在这里
class WangyiSpider(scrapy.Spider):name = 'wangyi'# allowed_domains = ['www.xxx.com']start_urls = ['http://war.163.com/']#实例化浏览器对象  只能被调一次def __init__(self):self.bro = webdriver.Chrome(r'C:\pacong_data\day3\chromedriver.exe')#不能写在这 因为这里也会被调多次def parse(self, response):div_list = response.xpath('//div[@class="data_row news_article clearfix "]')for div in div_list:title = div.xpath('.//div[@class="news_title"]/h3/a/text()').extract_first()print(title)#在整个爬虫结束之后才会被调用def closed(self,spider):print('关闭浏览器对象')self.bro.quit()

middlewares.py

from time import sleep
#1 HtmlResponse是response对应的类
from scrapy.http import HtmlResponseclass WangyiproDownloaderMiddleware(object):#拦截响应 重新生成一个新的响应对象 包含动态数据 实例化浏览器中不能写在这 这个方法可能会调多次#实例化浏览器可以通过中间件的process_response中的spider来获取#这里的request是response中所对应的请求对象def process_response(self, request, response, spider):# Called with the response returned from the downloader.# Must either;# - return a Response object# - return a Request object# - or raise IgnoreRequest#核心内容  如何获取动态加载的数据  使用selenium#获取实例化的浏览器对象 通过spider来获取#让这个浏览器发送get请求  是请求的url#也就是wangyi.py中的start_urls = ['http://war.163.com/']  这个urlprint('即将返回一个新的响应对象')bro = spider.brobro.get(url=request.url)#注意 这两个写法是一致的# bro.get(url='http://war.163.com/')# bro.get(url=spider.bro.current_url)sleep(3)#包含了动态加载出来的数据   获取到页面源码数据page_text = bro.page_source#body 响应体return HtmlResponse(url=request.url,body=page_text,encoding='utf-8',request=request)

settings.py

BOT_NAME = 'wangyiPro'SPIDER_MODULES = ['wangyiPro.spiders']
NEWSPIDER_MODULE = 'wangyiPro.spiders'USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'
# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'wangyiPro (+http://www.yourdomain.com)'# Obey robots.txt rules
ROBOTSTXT_OBEY = FalseDOWNLOADER_MIDDLEWARES = {'wangyiPro.middlewares.WangyiproDownloaderMiddleware': 543,
}

转载于:https://www.cnblogs.com/mlhz/p/10473517.html

Python爬虫之Scrapy框架使用selenium相关推荐

  1. 19. python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求 [前期准备] 2.分析及代码实现 (1)获取五大板块详情页url (2)解析每个板块 (3)解析每个模块里的标题中详情页信息 1.需 ...

  2. python爬虫之Scrapy框架的post请求和核心组件的工作 流程

    python爬虫之Scrapy框架的post请求和核心组件的工作 流程 一 Scrapy的post请求的实现 在爬虫文件中的爬虫类继承了Spider父类中的start_urls,该方法就可以对star ...

  3. Python爬虫之scrapy框架360全网图片爬取

    Python爬虫之scrapy框架360全网图片爬取 在这里先祝贺大家程序员节快乐,在此我也有一个好消息送给大家,本人已开通了微信公众号,我会把资源放在公众号上,还请大家小手动一动,关注过微信公众号, ...

  4. Python爬虫之Scrapy框架爬虫实战

    Python爬虫中Scrapy框架应用非常广泛,经常被人用于属于挖掘.检测以及自动化测试类项目,为啥说Scrapy框架作为半成品我们又该如何利用好呢 ?下面的实战案例值得大家看看. 目录: 1.Scr ...

  5. python爬虫——用Scrapy框架爬取阳光电影的所有电影

    python爬虫--用Scrapy框架爬取阳光电影的所有电影 1.附上效果图 2.阳光电影网址http://www.ygdy8.net/index.html 3.先写好开始的网址 name = 'yg ...

  6. 14. python爬虫——基于scrapy框架爬取糗事百科上的段子内容

    python爬虫--基于scrapy框架爬取糗事百科上的段子内容 1.需求 2.分析及实现 3.实现效果 4.进行持久化存储 (1)基于终端指令 (2)基于管道 [前置知识]python爬虫--scr ...

  7. 18.Python爬虫之Scrapy框架

    scrapy 框架 01. Scrapy 链接 02. Scrapy 的爬虫流程 03. Scrapy入门 04. setting.py文件中的常用设置 4.1. logging模块的使用 4.2. ...

  8. python爬虫之Scrapy框架,基本介绍使用以及用框架下载图片案例

    一.Scrapy框架简介 Scrapy是:由Python语言开发的一个快速.高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据,只需要实现少量的代码,就能够快速的抓取. S ...

  9. Python爬虫:Scrapy 框架快速入门及实战演练

    文章目录 一.Scrapy 框架准备 二.快速启动项目 1.创建项目结构 2.创建爬虫 3.更改设置 4.爬虫类分析 5.编写启动脚本 三.爬虫实战 1.初步探索 2.优化数据模型 3.优化数据存储方 ...

最新文章

  1. JMeter基础之一个简单的性能测试
  2. 小程序之 保存canvas生成商品图片附加小程序二维码 分享到朋友圈
  3. 趣学python3(1)-f前缀格式化字符串文本
  4. error C3872: '0x3000': this character is not allowed in an identifier 解决方法
  5. Leet Code OJ 110. Balanced Binary Tree [Difficulty: Easy]
  6. boost::function和boost:bind取代虚函数
  7. 解决若干WTL与VS2010的兼容问题(如error MSB6006: “cmd.exe”)
  8. Leetcode--31. 下一个排列
  9. 配置文件的读取添加webconfig
  10. 威胁情报 设备之外的安全能力
  11. 最新python招聘_重磅 | 最新报告:会Python竟成四大招人硬性指标?
  12. TDX指标的理解与改造(价格到达指标线提醒)
  13. React-flux杂记
  14. 报错处理——# Creating Server TCP listening socket *:6379: bind: Address already in use
  15. Java地图坐标转换
  16. Audio专业名词解析
  17. Windows学习总结(21)——常用网络命令ping、Telnet等详解
  18. Wipro为悉尼水务局部署SAP S/4HANA®
  19. 使用Jmockit完成static方法的mock
  20. (SVN笔记)SVN服务端+SVN客户端Tortoise——安装配置

热门文章

  1. iOS提交应用至App Store流程及真机调试 一,证书、配置文件
  2. 报告称苹果正扩展CareKit 组建团队推动医疗数据数字化
  3. import _winreg:用python操作修改windows注册表
  4. 扪心自问!一百多道难搞的面试题,你能答对了多少?
  5. 为什么只需要一个eden而需要两个survivor?
  6. 一个 .git 目录,领悟 Git 的强大!
  7. 史上最易懂的 Kubernetes 儿童插图指南
  8. 分享一个牛逼的阿里天猫面经,已经拿到 Offer ,来自朋友的朋友
  9. 面试必考-从URL输入到页面展现到底发生了什么
  10. 面试必备:缓存穿透,缓存雪崩的四种解决方案