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获取Linux系统下的本机IP地址代码分享
Nov 07 Python
Python列表计数及插入实例
Dec 17 Python
Python制作简易注册登录系统
Dec 15 Python
django之使用celery-把耗时程序放到celery里面执行的方法
Jul 12 Python
Python logging设置和logger解析
Aug 28 Python
Python统计时间内的并发数代码实例
Dec 28 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
Jan 08 Python
Django 博客实现简单的全文搜索的示例代码
Feb 17 Python
python实现程序重启和系统重启方式
Apr 16 Python
Python发送邮件封装实现过程详解
May 09 Python
Python接口测试环境搭建过程详解
Jun 29 Python
vscode调试django项目的方法
Aug 06 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
Dedecms常用函数解析
2008/02/01 PHP
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
2014/12/01 PHP
php用户注册信息验证正则表达式
2015/11/12 PHP
Joomla使用Apache重写模式的方法
2016/05/04 PHP
Thinkphp微信公众号支付接口
2016/08/04 PHP
datagrid框架的删除添加与修改
2013/04/08 Javascript
JavaScript?Apple设备检测示例代码
2013/11/15 Javascript
innerText 使用示例
2014/01/23 Javascript
js获得当前时区夏令时发生和终止的时间代码
2014/02/23 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
基于jQuery实现仿淘宝套餐选择插件
2015/03/04 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
浅谈JS函数定义方式的区别
2016/10/30 Javascript
JS对大量数据进行多重过滤的方法
2016/11/04 Javascript
JavaScript ES2019中的8个新特性详解
2019/02/20 Javascript
Vue.js组件通信之自定义事件详解
2019/10/19 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
2019/11/13 Javascript
Python中使用gzip模块压缩文件的简单教程
2015/04/08 Python
wxpython中自定义事件的实现与使用方法分析
2016/07/21 Python
python 创建弹出式菜单的实现代码
2017/07/11 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
2019/01/29 Python
解决django同步数据库的时候app models表没有成功创建的问题
2019/08/09 Python
Pytorch 卷积中的 Input Shape用法
2020/06/29 Python
html5之Canvas路径绘图、坐标变换应用实例
2012/12/26 HTML / CSS
什么是servlet
2012/05/08 面试题
学前教育专业毕业生自荐信
2013/10/03 职场文书
农民入党思想汇报
2014/01/03 职场文书
个人自我剖析材料
2014/09/30 职场文书
工作检讨书怎么写
2014/10/10 职场文书
刑事辩护授权委托书格式
2014/10/13 职场文书
银行保安拾金不昧表扬稿
2015/05/05 职场文书
vue项目多环境配置(.env)的实现
2021/07/21 Vue.js
微信小程序 根据不同用户切换不同TabBar
2022/04/21 Javascript
字节飞书面试promise.all实现示例
2022/06/16 Javascript