Scrapy 框架 使用 selenium 爬取动态加载内容
使用 selenium 爬取动态加载内容
开启中间件
DOWNLOADER_MIDDLEWARES = {
'wangyiPro.middlewares.WangyiproDownloaderMiddleware': 543,
}
在爬虫文件中 创建 浏览器对象
使用 爬虫文件的 init 方法
def __init__(self):
self.bro = webdriver.Chrome(executable_path=r'C:\Users\old-boy\Desktop\爬虫+数据\爬虫_day04\chromedriver.exe')数据解析:
start_urls = ['http://news.163.com/domestic/']
.......
def parse(self, response):
div_list = response.xpath('//div[@class="ndi_main"]/div')
for div in div_list:
title = div.xpath('./div/div[1]/h3/a/text()').extract_first()
detail_url = div.xpath('./div/div[1]/h3/a/@href').extract_first()
print(title,detail_url)
操作在 process_response(self,request,response,spider) 中 编写 浏览器自动化操作
进行点击 或者 页面滚动
返回新的 response 对象
rom time import sleep
from scrapy.http import HtmlResponse class WangyiproDownloaderMiddleware(object):
#拦截所有的响应对象
def process_response(self, request, response, spider):
# request.url 拦截到响应的 url 判断是否是请求的响应 对象
# 有些页面 不需要 使用 selenium 直接返回 response
# 参数spider表示的就是爬虫类的一个对象
# 使用一个满足需求的新的响应对象替换原有的
bro = spider.bro # 浏览器对象
url = spider.start_urls[0]
bro.get(url)
bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
sleep(2)
bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
sleep(2)
bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
sleep(2)
a_tag = bro.find_elements_by_class_name('load_more_btn')[0]
a_tag.click()
sleep(2)
page_text = bro.page_source
#实例化一个新的响应对象
response = HtmlResponse(url=bro.current_url,body=page_text,encoding='utf-8',request=request)
return response
关闭 浏览器对象
重写 closed(self,spider):
def closed(self,spider):
self.bro.quit()
Scrapy 框架 使用 selenium 爬取动态加载内容的更多相关文章
- Python+Selenium爬取动态加载页面(2)
		
注: 上一篇<Python+Selenium爬取动态加载页面(1)>讲了基本地如何获取动态页面的数据,这里再讲一个稍微复杂一点的数据获取全国水雨情网.数据的获取过程跟人手动获取过程类似,所 ...
 - Python+Selenium爬取动态加载页面(1)
		
注: 最近有一小任务,需要收集水质和水雨信息,找了两个网站:国家地表水水质自动监测实时数据发布系统和全国水雨情网.由于这两个网站的数据都是动态加载出来的,所以我用了Selenium来完成我的数据获取. ...
 - 关于使用scrapy框架编写爬虫以及Ajax动态加载问题、反爬问题解决方案
		
Python爬虫总结 总的来说,Python爬虫所做的事情分为两个部分,1:将网页的内容全部抓取下来,2:对抓取到的内容和进行解析,得到我们需要的信息. 目前公认比较好用的爬虫框架为Scrapy,而且 ...
 - 爬虫再探实战(三)———爬取动态加载页面——selenium
		
自学python爬虫也快半年了,在目前看来,我面临着三个待解决的爬虫技术方面的问题:动态加载,多线程并发抓取,模拟登陆.目前正在不断学习相关知识.下面简单写一下用selenium处理动态加载页面相关的 ...
 - 爬虫再探实战(四)———爬取动态加载页面——请求json
		
还是上次的那个网站,就是它.现在尝试用另一种办法——直接请求json文件,来获取要抓取的信息. 第一步,检查元素,看图如下: 过滤出JS文件,并找出包含要抓取信息的js文件,之后就是构造request ...
 - 基于scrapy框架输入关键字爬取有关贴吧帖子
		
基于scrapy框架输入关键字爬取有关贴吧帖子 站点分析 首先进入一个贴吧,要想达到输入关键词爬取爬取指定贴吧,必然需要利用搜索引擎 点进看到有四种搜索方式,分别试一次,观察url变化 我们得知: 搜 ...
 - C#使用phantomjs,爬取AJAX加载完成之后的页面
		
1.开发思路:入参根据apiSetting配置文件,分配静态文件存储地址,可实现不同站点的静态页生成功能.静态页生成功能使用无头浏览器生成,生成之后的字符串进行正则替换为固定地址,实现本地正常访问. ...
 - Win8 Metro动态加载内容框架
		
制作背景 为了参加ImagineCup 2013 世界公民类比赛,我们设计制作了一个可动态扩展的幼教类App.这个App需要能动态加载内容,内容包括带动画可交互的电子书,动画,视频,游戏. 技术支持 ...
 - 在ASP.NET中动态加载内容(用户控件和模板)
		
在ASP.NET中动态加载内容(用户控件和模板) 要点: 1. 使用Page.ParseControl 2. 使用base.LoadControl 第一部分:加载模板 下 面是一个模板“<tab ...
 
随机推荐
- 4.4 explain 之 possible_keys 、key、key_len
			
一.possible_keys 显示可能应用在这张表中的索引,一个或多个. 查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用. 二.key 实际使用的索引.如果为null,则没有 ...
 - nginx 日子配置
			
nginx access_log nginx 日志说明 不同用户防卫Nginx会把每个用户访问往咱的日志信息记录到指定的日志文件里,供网站管理员分析用户浏览行为等,此功能又ngx_http_log_m ...
 - 【Zookeeper】windows环境下zookeeper安装
			
下载 Apache官方最新版本为:3.4.12 下载地址:https://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.12/ 安装 解压到指定目录 ...
 - Excel通用类工具(二)
			
前言 上一篇中写到了用反射来处理类中的不用的属性,但是Excel的列名还得手动输入,这样还是比较麻烦的,今天这篇就利用自定义注解来解决手动传入列名的问题:其实很简单的,只需要在上一篇的基础上加一个类就 ...
 - Java自动内存管理机制学习(二):垃圾回收器与内存分配策略
			
备注:本文引自<深入理解Java虚拟机第二版>仅供参考 图片来自:http://csdn.net/WSYW126 垃圾收集器与内存分配策略 概述 GC要完成3件事: 哪些内存需要回收? 什 ...
 - 关于购物车添加按钮的动画(vue.js)
			
来自:https://segmentfault.com/a/1190000009294321 (侵删) git 源码地址 https://github.com/ustbhuangyi/vue-sel ...
 - 正则去除html字符串中的注释、标签、属性
			
var str = '<!-- 注释1 --><h1 style="color:#00ff00;text-align: center;">ProsperLe ...
 - 2018-06-29 "西游记"主题Python入门示例尝试-数据结构 5.1-5.1.2
			
(见前: 中文代码示例视频演示Python入门第五章 数据结构 仍然基于官方文档, 欢迎建议(尤其是如何取材). 5. Data Structures - More on Lists 列表详述 > ...
 - 如何制作微信动态表情包 GIF制作工具哪个好
			
表情包已经成为我们生活聊天中必不可少的一部分,但是如何制作微信动态表情包呢?自己制作的表情包更加独有个性,今天小编带大家看一波原创表情包的制作方法吧! 使用工具:电脑 操作方法: 1.首先在手机上也是 ...
 - matlab练习程序(求向量间的旋转矩阵与四元数)
			
问题是这样,如果我们知道两个向量v1和v2,计算从v1转到v2的旋转矩阵和四元数,由于旋转矩阵和四元数可以互转,所以我们先计算四元数. 我们可以认为v1绕着向量u旋转θ角度到v2,u垂直于v1-v2 ...