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爬虫之爬虫的定义及URL构成
Nov 04 Python
Python实现二分法算法实例
Feb 02 Python
python读取word文档的方法
May 09 Python
Python简单网络编程示例【客户端与服务端】
May 26 Python
python机器学习理论与实战(五)支持向量机
Jan 19 Python
python 获取文件下所有文件或目录os.walk()的实例
Apr 23 Python
Python检测网络延迟的代码
May 15 Python
Python 变量类型详解
Oct 10 Python
Python基础教程之异常详解
Jan 10 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
Oct 30 Python
解决Tensorflow占用GPU显存问题
Feb 03 Python
容易被忽略的Python内置类型
Sep 03 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 var_export与var_dump 输出的不同
2013/08/09 PHP
使用PHP+AJAX让WordPress动态加载文章的教程
2015/12/11 PHP
PHP正则表达式入门教程(推荐)
2016/05/18 PHP
php英文单词统计器
2016/06/23 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
做网页的一些技巧
2007/02/01 Javascript
javascript中的new使用
2010/03/20 Javascript
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
2011/07/04 Javascript
有关JavaScript的10个怪癖和秘密分享
2011/08/28 Javascript
JQuery的read函数与js的onload不同方式实现
2013/03/18 Javascript
JavaScript中最简洁的编码html字符串的方法
2014/10/11 Javascript
jQuery中extend函数详解
2015/02/13 Javascript
JavaScript DOM操作表格及样式
2015/04/13 Javascript
jQuery实现新消息在网页标题闪烁提示
2015/06/23 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
js实现精确到毫秒的倒计时效果
2016/08/05 Javascript
基于Node.js的WebSocket通信实现
2017/03/11 Javascript
bootstrap手风琴折叠示例代码分享
2017/05/22 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
手写Node静态资源服务器的实现方法
2018/03/20 Javascript
Node.Js中实现端口重用原理详解
2018/05/03 Javascript
微信跳一跳游戏python脚本
2020/04/01 Python
用Python将Excel数据导入到SQL Server的例子
2019/08/24 Python
基于Python实现扑克牌面试题
2019/12/11 Python
python 装饰器功能与用法案例详解
2020/03/06 Python
python名片管理系统开发
2020/06/18 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
澳大利亚运动鞋商店:Platypus Shoes
2019/09/27 全球购物
什么是View State?
2013/01/27 面试题
市政施工员自我鉴定
2014/01/15 职场文书
2014年商场超市庆元旦活动方案
2014/02/14 职场文书
优秀班组事迹材料
2014/12/24 职场文书
2015年社区计生工作总结
2015/04/21 职场文书
写给女朋友的检讨书
2015/05/06 职场文书
redis实现共同好友的思路详解
2021/05/26 Redis
python中urllib包的网络请求教程
2022/04/19 Python