Python爬虫之Scrapy框架使用selenium
在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相关推荐
- 19. python爬虫——基于scrapy框架爬取网易新闻内容
python爬虫--基于scrapy框架爬取网易新闻内容 1.需求 [前期准备] 2.分析及代码实现 (1)获取五大板块详情页url (2)解析每个板块 (3)解析每个模块里的标题中详情页信息 1.需 ...
- python爬虫之Scrapy框架的post请求和核心组件的工作 流程
python爬虫之Scrapy框架的post请求和核心组件的工作 流程 一 Scrapy的post请求的实现 在爬虫文件中的爬虫类继承了Spider父类中的start_urls,该方法就可以对star ...
- Python爬虫之scrapy框架360全网图片爬取
Python爬虫之scrapy框架360全网图片爬取 在这里先祝贺大家程序员节快乐,在此我也有一个好消息送给大家,本人已开通了微信公众号,我会把资源放在公众号上,还请大家小手动一动,关注过微信公众号, ...
- Python爬虫之Scrapy框架爬虫实战
Python爬虫中Scrapy框架应用非常广泛,经常被人用于属于挖掘.检测以及自动化测试类项目,为啥说Scrapy框架作为半成品我们又该如何利用好呢 ?下面的实战案例值得大家看看. 目录: 1.Scr ...
- python爬虫——用Scrapy框架爬取阳光电影的所有电影
python爬虫--用Scrapy框架爬取阳光电影的所有电影 1.附上效果图 2.阳光电影网址http://www.ygdy8.net/index.html 3.先写好开始的网址 name = 'yg ...
- 14. python爬虫——基于scrapy框架爬取糗事百科上的段子内容
python爬虫--基于scrapy框架爬取糗事百科上的段子内容 1.需求 2.分析及实现 3.实现效果 4.进行持久化存储 (1)基于终端指令 (2)基于管道 [前置知识]python爬虫--scr ...
- 18.Python爬虫之Scrapy框架
scrapy 框架 01. Scrapy 链接 02. Scrapy 的爬虫流程 03. Scrapy入门 04. setting.py文件中的常用设置 4.1. logging模块的使用 4.2. ...
- python爬虫之Scrapy框架,基本介绍使用以及用框架下载图片案例
一.Scrapy框架简介 Scrapy是:由Python语言开发的一个快速.高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据,只需要实现少量的代码,就能够快速的抓取. S ...
- Python爬虫:Scrapy 框架快速入门及实战演练
文章目录 一.Scrapy 框架准备 二.快速启动项目 1.创建项目结构 2.创建爬虫 3.更改设置 4.爬虫类分析 5.编写启动脚本 三.爬虫实战 1.初步探索 2.优化数据模型 3.优化数据存储方 ...
最新文章
- JMeter基础之一个简单的性能测试
- 小程序之 保存canvas生成商品图片附加小程序二维码 分享到朋友圈
- 趣学python3(1)-f前缀格式化字符串文本
- error C3872: '0x3000': this character is not allowed in an identifier 解决方法
- Leet Code OJ 110. Balanced Binary Tree [Difficulty: Easy]
- boost::function和boost:bind取代虚函数
- 解决若干WTL与VS2010的兼容问题(如error MSB6006: “cmd.exe”)
- Leetcode--31. 下一个排列
- 配置文件的读取添加webconfig
- 威胁情报 设备之外的安全能力
- 最新python招聘_重磅 | 最新报告:会Python竟成四大招人硬性指标?
- TDX指标的理解与改造(价格到达指标线提醒)
- React-flux杂记
- 报错处理——# Creating Server TCP listening socket *:6379: bind: Address already in use
- Java地图坐标转换
- Audio专业名词解析
- Windows学习总结(21)——常用网络命令ping、Telnet等详解
- Wipro为悉尼水务局部署SAP S/4HANA®
- 使用Jmockit完成static方法的mock
- (SVN笔记)SVN服务端+SVN客户端Tortoise——安装配置