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使用BeautifulSoup分页网页中超链接的方法
Apr 04 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
Aug 24 Python
Django实现快速分页的方法实例
Oct 22 Python
Python编程二分法实现冒泡算法+快速排序代码示例
Jan 15 Python
Centos7 Python3下安装scrapy的详细步骤
Mar 15 Python
Django添加favicon.ico图标的示例代码
Aug 07 Python
python实现扫描ip地址的小程序
Apr 16 Python
Python两台电脑实现TCP通信的方法示例
May 06 Python
关于Python3 lambda函数的深入浅出
Nov 27 Python
pycharm设置当前工作目录的操作(working directory)
Feb 14 Python
Django使用Celery加redis执行异步任务的实例内容
Feb 20 Python
python和C/C++混合编程之使用ctypes调用 C/C++的dll
Apr 29 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上传图片重命名的6种解决方法的详细介绍
2013/04/28 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
2015/12/31 PHP
PHP引用的调用方法分析
2016/04/25 PHP
使用jQuery同时控制四张图片的伸缩实现代码
2013/04/19 Javascript
js中parseInt函数浅谈
2013/07/31 Javascript
javascript自启动函数的问题探讨
2013/10/05 Javascript
jquery快捷动态绑定键盘事件的操作函数代码
2013/10/17 Javascript
jQuery中Form相关知识汇总
2015/01/06 Javascript
AngularJS通过$location获取及改变当前页面的URL
2016/09/23 Javascript
js与jquery分别实现tab标签页功能的方法
2016/11/18 Javascript
jQuery 选择符详细介绍及整理
2016/12/02 Javascript
Bootstrap Table使用整理(五)之分页组合查询
2017/06/09 Javascript
改变vue请求过来的数据中的某一项值的方法(详解)
2018/03/08 Javascript
深入浅析Vue.js中 computed和methods不同机制
2018/03/22 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
2019/09/03 Javascript
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
vue引用外部JS的两种种方法
2020/01/28 Javascript
python创建临时文件夹的方法
2015/07/06 Python
flask + pymysql操作Mysql数据库的实例
2017/11/13 Python
华为校园招聘上机笔试题 扑克牌大小(python)
2020/04/22 Python
PyQt5实现QLineEdit添加clicked信号的方法
2019/06/25 Python
pyqt5数据库使用详细教程(打包解决方案)
2020/03/25 Python
python爬虫用scrapy获取影片的实例分析
2020/11/23 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
css3 transform过渡抖动问题解决
2020/10/23 HTML / CSS
HTML5 标准将把互联网视频扔回到黑暗时代
2010/02/10 HTML / CSS
HTML5 video标签(播放器)学习笔记(一):使用入门
2015/04/24 HTML / CSS
加拿大最大的相机店:Henry’s
2017/05/17 全球购物
俄罗斯皮肤健康中心:Pharmacosmetica.ru
2020/02/22 全球购物
《英英学古诗》教学反思
2014/04/11 职场文书
党风廉设责任书
2014/04/16 职场文书
啤酒节策划方案
2014/05/28 职场文书
材料成型及控制工程专业求职信
2014/06/19 职场文书
毕业生评语大全
2015/01/04 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书
教你如何使用Python下载B站视频的详细教程
2021/04/29 Python