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去掉字符串中重复字符的方法
Feb 27 Python
Python中使用PyHook监听鼠标和键盘事件实例
Jul 18 Python
Python文件去除注释的方法
May 25 Python
深入理解python函数递归和生成器
Jun 06 Python
Python实现的文本简单可逆加密算法示例
May 18 Python
python通过百度地图API获取某地址的经纬度详解
Jan 28 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
Apr 02 Python
PyQt5每天必学之创建窗口居中效果
Apr 19 Python
influx+grafana自定义python采集数据和一些坑的总结
Sep 17 Python
解决django中ModelForm多表单组合的问题
Jul 18 Python
关于python导入模块import与常见的模块详解
Aug 28 Python
Django Docker容器化部署之Django-Docker本地部署
Oct 09 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编程开发“虚拟域名”系统
2006/10/09 PHP
Discuz!下Memcache缓存实现方法
2010/05/28 PHP
php&mysql 日期操作小记
2012/02/27 PHP
全面解析PHP面向对象的三大特征
2017/06/10 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
thinkPHP框架实现的简单计算器示例
2018/12/07 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
IE与FireFox的兼容性问题分析
2007/04/22 Javascript
javascript函数定义的几种区别小结
2014/01/06 Javascript
jQuery获得内容和属性示例代码
2014/01/16 Javascript
jquery中checkbox全选失效的解决方法
2014/12/26 Javascript
bootstrap输入框组代码分享
2016/06/07 Javascript
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
2016/11/29 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
angular双向绑定模拟探索
2016/12/26 Javascript
如何用js判断dom是否有存在某class的值
2017/02/13 Javascript
React Native 使用Fetch发送网络请求的示例代码
2017/12/02 Javascript
javascript中的隐式调用
2018/02/10 Javascript
VUE项目中加载已保存的笔记实例方法
2019/09/14 Javascript
Vue动态加载图片在跨域时无法显示的问题及解决方法
2020/03/10 Javascript
python验证码识别教程之滑动验证码
2018/06/04 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
2020/02/25 Python
HTTP状态码详解
2021/03/18 杂记
Anya Hindmarch官网:奢侈设计师手袋及配饰
2018/11/15 全球购物
华纳兄弟工作室的官方授权商店:WB Shop
2018/11/30 全球购物
意大利体育用品和运动服网上商店:Maxi Sport
2019/09/14 全球购物
专科毕业生就业推荐信
2013/11/01 职场文书
学校安全工作汇报材料
2014/08/16 职场文书
公司委托书格式范本
2014/09/16 职场文书
公司党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
施工安全保证书
2015/05/09 职场文书
python爬虫框架feapde的使用简介
2021/04/20 Python
Python函数式编程中itertools模块详解
2021/09/15 Python
Mysql Innodb存储引擎之索引与算法
2022/02/15 MySQL