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 读写、创建 文件的方法(必看)
Sep 12 Python
python对DICOM图像的读取方法详解
Jul 17 Python
python实现俄罗斯方块
Jun 26 Python
Python快速查找list中相同部分的方法
Jun 27 Python
pandas去除重复列的实现方法
Jan 29 Python
Django restframework 源码分析之认证详解
Feb 22 Python
python中dict使用方法详解
Jul 17 Python
Django后端接收嵌套Json数据及解析详解
Jul 17 Python
使用python实现unix2dos和dos2unix命令的例子
Aug 13 Python
对Python中一维向量和一维向量转置相乘的方法详解
Aug 26 Python
利用pyshp包给shapefile文件添加字段的实例
Dec 06 Python
Pycharm安装python库的方法
Nov 24 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 strncasecmp字符串比较的小技巧
2011/01/04 PHP
将二维数组转为一维数组的2种方法
2014/05/26 PHP
php_screw安装使用教程(另一个PHP代码加密实现)
2014/05/29 PHP
VB中的RasEnumConnections函数返回632错误解决方法
2014/07/29 PHP
thinkphp浏览历史功能实现方法
2014/10/29 PHP
从刷票了解获得客户端IP的方法
2015/09/21 PHP
实例分析基于PHP微信网页获取用户信息
2017/11/24 PHP
PHP 7.4中使用预加载的方法详解
2019/07/08 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
2020/02/12 PHP
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
2011/03/28 Javascript
Extjs EditorGridPanel中ComboBox列的显示问题
2011/07/04 Javascript
js验证输入是否为手机号码或电话号码示例
2013/12/30 Javascript
纯javascript实现图片延时加载方法
2015/08/21 Javascript
Bootstrap表单布局
2016/07/19 Javascript
JS代码实现电脑配置检测功能
2018/03/21 Javascript
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
javascript实现的图片预览和上传功能示例【兼容IE 9】
2020/05/01 Javascript
简单介绍Python中的len()函数的使用
2015/04/07 Python
在Django中限制已登录用户的访问的方法
2015/07/23 Python
python中pip的安装与使用教程
2018/08/10 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
2020/05/27 Python
浅谈pandas筛选出表中满足另一个表所有条件的数据方法
2019/02/08 Python
Python使用POP3和SMTP协议收发邮件的示例代码
2019/04/16 Python
Python re 模块findall() 函数返回值展现方式解析
2019/08/09 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
pytorch SENet实现案例
2020/06/24 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
老生常谈CSS中的长度单位
2016/06/27 HTML / CSS
荷兰鞋类购物网站:Donelli
2019/05/24 全球购物
网络工程师的自我评价
2013/10/02 职场文书
大学生秋游活动方案
2014/02/17 职场文书
《找不到快乐的波斯猫》教学反思
2014/02/24 职场文书
公司管理建议书范文
2014/03/12 职场文书
2014年帮扶工作总结
2014/11/26 职场文书
利用Python+OpenCV三步去除水印
2021/05/28 Python
JPA如何使用entityManager执行SQL并指定返回类型
2021/06/15 Java/Android