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实现颜色色值转换的小工具
Oct 27 Python
PyCharm在win10的64位系统安装实例
Nov 26 Python
python学习之matplotlib绘制散点图实例
Dec 09 Python
selenium+python实现自动登录脚本
Apr 22 Python
PyQt5实现简易计算器
May 30 Python
pytorch 实现模型不同层设置不同的学习率方式
Jan 06 Python
解决在keras中使用model.save()函数保存模型失败的问题
May 21 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
Jun 29 Python
3分钟看懂Python后端必须知道的Django的信号机制
Jul 26 Python
python 如何引入协程和原理分析
Nov 30 Python
python requests模块的使用示例
Apr 07 Python
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
May 31 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迭代器实现斐波纳契数列的函数
2013/11/12 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
2014/12/15 PHP
Apache服务器下防止图片盗链的办法
2015/07/06 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
2016/04/11 PHP
javascript中的new使用
2010/03/20 Javascript
jquery等宽输出文字插件使用介绍
2013/09/18 Javascript
jQuery中的pushStack实现原理和应用实例
2015/02/03 Javascript
jQuery实现的跨容器无缝拖动效果代码
2016/06/21 Javascript
jQuery实现将div中滚动条滚动到指定位置的方法
2016/08/10 Javascript
AngularJS $injector 依赖注入详解
2016/09/14 Javascript
Require.JS中的几种define定义方式示例
2017/06/01 Javascript
关于webpack代码拆分的解析
2017/07/20 Javascript
JavaScript 日期时间选择器一些小结
2018/04/02 Javascript
使用vue2.0创建的项目的步骤方法
2018/09/25 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
2019/09/21 Javascript
JS防抖和节流实例解析
2019/09/24 Javascript
JavaScript中作用域链的概念及用途讲解
2020/08/06 Javascript
跟老齐学Python之玩转字符串(1)
2014/09/14 Python
Python实现的摇骰子猜大小功能小游戏示例
2017/12/18 Python
python如何在循环引用中管理内存
2018/03/20 Python
python基于C/S模式实现聊天室功能
2019/01/09 Python
Pandas之MultiIndex对象的示例详解
2019/06/25 Python
使用python turtle画高达
2020/01/19 Python
Python实现打包成库供别的模块调用
2020/07/13 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
python mock测试的示例
2020/10/19 Python
python如何编写类似nmap的扫描工具
2020/11/06 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
Theflamel意大利:女士奢华服装、鞋子和配件
2020/01/11 全球购物
迪卡侬中国官网:Decathlon中国
2020/08/10 全球购物
路德维希•贝克(LUDWIG BECK)中文官网:德国大型美妆百货
2020/09/19 全球购物
师范生个人推荐信
2013/11/29 职场文书
竞聘书模板
2014/03/31 职场文书
企业挂职心得体会
2014/09/10 职场文书
刑事附带民事代理词
2015/05/25 职场文书
Golang解析JSON对象
2022/04/30 Golang