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内置函数Type()函数一个有趣的用法
Feb 18 Python
Python_LDA实现方法详解
Oct 25 Python
Python实现的爬虫刷回复功能示例
Jun 07 Python
Numpy数据类型转换astype,dtype的方法
Jun 09 Python
利用Anaconda简单安装scrapy框架的方法
Jun 13 Python
python 同时运行多个程序的实例
Jan 07 Python
Python Pywavelet 小波阈值实例
Jan 09 Python
python交易记录链的实现过程详解
Jul 03 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
Jan 04 Python
PyQt5中多线程模块QThread使用方法的实现
Jan 31 Python
Python基于pip实现离线打包过程详解
May 15 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
Oct 10 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
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
2015/10/09 PHP
又一个小巧的图片预加载类
2007/05/05 Javascript
jquery 简单导航实现代码
2009/09/11 Javascript
js控制滚动条缓慢滚动到顶部实现代码
2013/03/20 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
JS实现图片放大镜效果的方法
2015/02/27 Javascript
浅谈js里面的InttoStr和StrtoInt
2016/06/14 Javascript
JavaScript随机生成颜色的方法
2016/10/15 Javascript
原生JS实现导航下拉菜单效果
2020/11/25 Javascript
Bootstrap 响应式实用工具实例详解
2017/03/29 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
2017/07/20 Javascript
node使用promise替代回调函数
2018/05/07 Javascript
详解在create-react-app使用less与antd按需加载
2018/12/06 Javascript
关于js陀螺仪的理解分析
2019/04/11 Javascript
vue中typescript装饰器的使用方法超实用教程
2019/06/17 Javascript
JS面向对象编程实现的拖拽功能案例详解
2020/03/03 Javascript
[01:10:58]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
Python中实现三目运算的方法
2015/06/21 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
2018/04/02 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
pyftplib中文乱码问题解决方案
2020/01/11 Python
tensorflow 实现打印pb模型的所有节点
2020/01/23 Python
Python selenium爬取微博数据代码实例
2020/05/22 Python
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
HTML5未来发展趋势
2016/02/01 HTML / CSS
护理个人求职信范文
2014/01/08 职场文书
中介公司区域经理岗位职责范本
2014/03/02 职场文书
幼儿教师师德师风自我剖析材料
2014/09/29 职场文书
2014年政工师工作总结
2014/12/18 职场文书
2015年爱牙日活动总结
2015/02/05 职场文书
社区重阳节活动总结
2015/03/24 职场文书
2016年“我们的节日·重阳节”主题活动总结
2016/04/01 职场文书
python基础之函数的定义和调用
2021/10/24 Python
Mysql事务索引知识汇总
2022/03/17 MySQL
Redis集群节点通信过程/原理流程分析
2022/03/18 Redis
Redis实现一个账号只能登录一个设备
2022/04/19 Redis