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中用memcached来减少数据库查询次数的教程
Apr 07 Python
tensorflow中next_batch的具体使用
Feb 02 Python
python之DataFrame实现excel合并单元格
Feb 22 Python
python检测主机的连通性并记录到文件的实例
Jun 21 Python
python3 爬取图片的实例代码
Nov 06 Python
详解配置Django的Celery异步之路踩坑
Nov 25 Python
Django框架组成结构、基本概念与文件功能分析
Jul 30 Python
python向图片里添加文字
Nov 26 Python
Django admin管理工具TabularInline类用法详解
May 14 Python
如何对python的字典进行排序
Jun 19 Python
Matlab求解数组中的最大值及它所在的具体位置
Apr 16 Python
浅谈Python中的函数(def)及参数传递操作
May 25 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学习笔记 用户注册模块用户类以及验证码类
2011/09/20 PHP
PHP求小于1000的所有水仙花数的代码
2012/01/10 PHP
PHP内核学习教程之php opcode内核实现
2016/01/27 PHP
ThinkPHP表单令牌错误的相关解决方法分析
2016/05/20 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
PHP  Yii清理缓存的实现方法
2016/11/10 PHP
JQuery 应用 JQuery.groupTable.js
2010/12/15 Javascript
javascript 数组排序函数sort和reverse使用介绍
2013/11/21 Javascript
jquery数组之存放checkbox全选值示例代码
2013/12/20 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
2015/10/19 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
Jquery和JS获取ul中li标签的实现方法
2016/06/02 Javascript
jQuery滚动插件scrollable.js用法分析
2017/05/25 jQuery
javascript用rem来做响应式开发
2018/01/13 Javascript
layerUI下的绑定事件实例代码
2018/08/17 Javascript
微信小程序停止其他视频播放当前视频的实例代码
2019/12/25 Javascript
基python实现多线程网页爬虫
2015/09/06 Python
python里使用正则表达式的组嵌套实例详解
2017/10/24 Python
Django自定义用户认证示例详解
2018/03/14 Python
对python插入数据库和生成插入sql的示例讲解
2018/11/14 Python
如何利用Python模拟GitHub登录详解
2019/07/15 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
CSS实现鼠标滑过鼠标点击代码写法
2016/12/26 HTML / CSS
经典大学生求职信范文
2014/01/06 职场文书
小学校长汇报材料
2014/08/20 职场文书
2014领导干部四风问题查摆思想汇报
2014/09/13 职场文书
公安交警个人对照检查材料思想汇报
2014/10/01 职场文书
民间借贷纠纷案件代理词
2015/05/26 职场文书
公司庆典主持词
2015/07/04 职场文书
python 机器学习的标准化、归一化、正则化、离散化和白化
2021/04/16 Python
总结Java对象被序列化的两种方法
2021/06/30 Java/Android
使用SQL实现车流量的计算的示例代码
2022/02/28 SQL Server
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python
安装harbor作为docker镜像仓库的问题
2022/06/14 Servers