Scrapy基于selenium结合爬取淘宝的实例讲解


Posted in Python onJune 13, 2018

在对于淘宝,京东这类网站爬取数据时,通常直接使用发送请求拿回response数据,在解析获取想要的数据时比较难的,因为数据只有在浏览网页的时候才会动态加载,所以要想爬取淘宝京东上的数据,可以使用selenium来进行模拟操作

对于scrapy框架,下载器来说已经没多大用,因为获取的response源码里面没有想要的数据,因为没有加载出来,所以要在请求发给下载中间件的时候直接使用selenium对请求解析,获得完整response直接返回,不经过下载器下载,上代码

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
from scrapy.http.response.html import HtmlResponse
from scrapy.http.response.text import TextResponse
from selenium.webdriver import ActionChains
 
class TaobaoMiddleware(object):
 
 #处理请求函数
 def process_request(self,request,spider):
  #声明一个Options对象
  opt = Options()
  #给对象添加一个--headless参数,表示无头启动
  opt.add_argument('--headless')
  #把配置参数应用到驱动创建的对象
  driver = webdriver.Chrome(options=opt)
  #打开requests中的地址
  driver.get(request.url)
 
  #让浏览器滚动到底部
  for x in range(1,11):
   j = x / 10
   js = "document.documentElement.scrollTop = document.documentElement.scrollHeight*%f"%j
   driver.execute_script(js)
   #每次滚动等待0.5s
   time.sleep(5)
 
  #获取下一页按钮的标签
  next_btn =driver.find_element_by_xpath('//span[contains(text(),"下一页")]')
  #睡眠0.5秒
  time.sleep(0.5)
  #对下一页标签进行鼠标右键触发事件
  ActionChains(driver).context_click(next_btn).click().perform()
  # driver.save_screenshot('截图.png')
  #把驱动对象获得的源码赋值给新变量
  page_source = driver.page_source
  #退出
  driver.quit()
 
  #根据网页源代码,创建Htmlresponse对象
  response = HtmlResponse(url=request.url,body=page_source,encoding='utf-8',request=request)
  #因为返回的是文本消息,所以需要指定字符编码格式
 
  return response
 
 def process_response(self,request,response,spider):
 
  return response
 
 def process_exception(self,request,exception,spider):
  pass

以上这篇Scrapy基于selenium结合爬取淘宝的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在漏洞利用Python代码真的很爽
Aug 26 Python
python使用marshal模块序列化实例
Sep 25 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
Jun 14 Python
Python中类的初始化特殊方法
Dec 01 Python
django站点管理详解
Dec 12 Python
opencv python 傅里叶变换的使用
Jul 21 Python
Python3爬虫学习入门教程
Dec 11 Python
python:接口间数据传递与调用方法
Dec 17 Python
使用Python制作表情包实现换脸功能
Jul 19 Python
Python 等分切分数据及规则命名的实例代码
Aug 16 Python
python判断正负数方式
Jun 03 Python
PYTHON使用Matplotlib去实现各种条形图的绘制
Mar 22 Python
利用Anaconda简单安装scrapy框架的方法
Jun 13 #Python
基于scrapy的redis安装和配置方法
Jun 13 #Python
mac下给python3安装requests库和scrapy库的实例
Jun 13 #Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
Jun 13 #Python
解决Mac安装scrapy失败的问题
Jun 13 #Python
mac安装scrapy并创建项目的实例讲解
Jun 13 #Python
解决Tensorflow安装成功,但在导入时报错的问题
Jun 13 #Python
You might like
PHP中simplexml_load_string函数使用说明
2011/01/01 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
2013/07/19 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
2014/11/19 PHP
yii2项目实战之restful api授权验证详解
2017/05/20 PHP
laravel自定义分页效果
2017/07/23 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
jQuery powerFloat万能浮动层下拉层插件使用介绍
2010/12/27 Javascript
jquery中通过过滤器获取表单元素的实现代码
2011/07/05 Javascript
判断对象是否Window的实现代码
2012/01/10 Javascript
javascript类型转换使用方法
2014/02/08 Javascript
jQuery实现下拉框左右选择的简单实例
2014/02/22 Javascript
Javascript中arguments对象详解
2014/10/22 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
实例讲解jQuery中对事件的命名空间的运用
2016/05/24 Javascript
IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法
2016/10/25 Javascript
jQuery使用正则验证15/18身份证的方法示例
2017/04/27 jQuery
Javascript实现基本运算器
2017/07/15 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
vue 监听屏幕高度的实例
2018/09/05 Javascript
函数式编程入门实践(一)
2019/04/20 Javascript
[05:39]2014DOTA2国际邀请赛 DK晋级胜者组专访战队国士无双
2014/07/14 DOTA
Python使用multiprocessing创建进程的方法
2015/06/04 Python
Python实现mysql数据库更新表数据接口的功能
2017/11/19 Python
Python中sort和sorted函数代码解析
2018/01/25 Python
Python用for循环实现九九乘法表
2018/05/31 Python
解决Python 使用h5py加载文件,看不到keys()的问题
2019/02/08 Python
Python中单线程、多线程和多进程的效率对比实验实例
2019/05/14 Python
Python字典的概念及常见应用实例详解
2019/10/30 Python
基于python中__add__函数的用法
2019/11/25 Python
pytorch实现建立自己的数据集(以mnist为例)
2020/01/18 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
2020/10/12 Python
2015年普法依法治理工作总结
2015/05/26 职场文书
新郎父母婚礼答谢词
2015/09/29 职场文书
详解MySQL集群搭建
2021/05/26 MySQL
新手初学Java网络编程
2021/07/07 Java/Android
详解在SQLPlus中实现上下键翻查历史命令的功能
2022/03/18 SQL Server