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多线程用法实例详解
Jan 15 Python
Python解决抛小球问题 求小球下落经历的距离之和示例
Feb 01 Python
对命令行模式与python交互模式介绍
May 12 Python
python-itchat 获取微信群用户信息的实例
Feb 21 Python
从0开始的Python学习014面向对象编程(推荐)
Apr 02 Python
Python实现桌面翻译工具【新手必学】
Feb 12 Python
Django 解决model 反向引用中的related_name问题
May 19 Python
python numpy库np.percentile用法说明
Jun 08 Python
Python 如何测试文件是否存在
Jul 31 Python
Python使用Selenium模拟浏览器自动操作功能
Sep 08 Python
Python读取多列数据以及用matplotlib制作图表方法实例
Sep 23 Python
PyTorch梯度裁剪避免训练loss nan的操作
May 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 分页函数multi() discuz
2009/06/21 PHP
用php来改写404错误页让你的页面更友好
2013/01/24 PHP
php生成静态页面的简单示例
2014/04/17 PHP
PHP中include/require/include_once/require_once使用心得
2016/08/28 PHP
PHP attributes()函数讲解
2019/02/03 PHP
对xmlHttp对象方法和属性的理解
2011/01/17 Javascript
JavaScript 在网页上单击鼠标的地方显示层及关闭层
2012/12/30 Javascript
jQuery中的编程范式详解
2014/12/15 Javascript
javascript中Array()数组函数详解
2015/08/23 Javascript
Bootstrap 手风琴菜单的实现代码
2017/01/20 Javascript
微信小程使用swiper组件实现图片轮播切换显示功能【附源码下载】
2017/12/12 Javascript
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
vue2.0 循环遍历加载不同图片的方法
2018/03/06 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
2018/06/14 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
详解使用element-ui table组件的筛选功能的一个小坑
2018/11/02 Javascript
js中事件对象和事件委托的介绍
2019/01/21 Javascript
Vue结合后台导入导出Excel问题详解
2019/02/19 Javascript
js module大战
2019/04/19 Javascript
Echarts在Taro微信小程序开发中的踩坑记录
2020/11/09 Javascript
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
python使用zip将list转为json的方法
2018/12/31 Python
django做form表单的数据验证过程详解
2019/07/26 Python
tensorflow中tf.slice和tf.gather切片函数的使用
2020/01/19 Python
浅析Python 抽象工厂模式的优缺点
2020/07/13 Python
海外淘书首选:AbeBooks
2017/07/31 全球购物
英国医生在线预约:Top Doctors
2019/10/30 全球购物
Linux上比较文件的命令都有哪些
2012/02/24 面试题
员工晚婚的请假条
2014/02/08 职场文书
工商管理自荐书
2014/07/06 职场文书
低碳环保演讲稿
2014/08/28 职场文书
2014院党委领导班子对照检查材料思想汇报
2014/09/24 职场文书
实施意见格式范本
2015/06/05 职场文书
法定代表人免职证明
2015/06/24 职场文书
纯CSS实现hover图片pop-out弹出效果的实例代码
2021/04/16 HTML / CSS
详解CSS中postion和opacity及cursor的特性
2022/08/14 HTML / CSS