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和php通信乱码问题解决方法
Apr 15 Python
Python出现segfault错误解决方法
Apr 16 Python
Python中datetime模块参考手册
Jan 13 Python
Python批量修改图片分辨率的实例代码
Jul 04 Python
Python字符串大小写转换拼接删除空白
Sep 19 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
Feb 28 Python
pyecharts调整图例与各板块的位置间距实例
May 16 Python
Python列表嵌套常见坑点及解决方案
Sep 30 Python
通过实例解析python and和or使用方法
Nov 14 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
Nov 30 Python
python线程优先级队列知识点总结
Feb 28 Python
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
Apr 13 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
Terran热键控制
2020/03/14 星际争霸
php中用socket模拟http中post或者get提交数据的示例代码
2013/08/08 PHP
一组PHP加密解密函数分享
2014/06/05 PHP
PHP中STDCLASS用法实例分析
2016/11/11 PHP
js 实现无干扰阴影效果 简单好用(附文件下载)
2009/12/27 Javascript
我遇到的参数传递中 双引号单引号嵌套问题
2010/02/11 Javascript
基于jQuery的Spin Button自定义文本框数值自增或自减
2010/07/17 Javascript
js对象数组按属性快速排序
2011/01/31 Javascript
js 文本滚动效果的实例代码
2013/08/17 Javascript
用html5 js实现点击一个按钮达到浏览器全屏效果
2014/05/28 Javascript
Jquery效果大全之制作电脑健康体检得分特效附源码下载
2015/11/02 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
2015/11/29 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
2016/12/18 Javascript
微信小程序 生命周期函数详解
2017/05/24 Javascript
js实现带进度条提示的多视频上传功能
2020/12/13 Javascript
Webpack实战加载SVG的方法
2017/12/26 Javascript
使用JS判断页面是首次被加载还是刷新
2019/05/26 Javascript
基于vue的tab-list类目切换商品列表组件的示例代码
2020/02/14 Javascript
JavaScript代码实现微博批量取消关注功能
2021/02/05 Javascript
在Django框架中运行Python应用全攻略
2015/07/17 Python
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
python文件选择对话框的操作方法
2019/06/27 Python
py-charm延长试用期限实例
2019/12/22 Python
Pycharm中配置远程Docker运行环境的教程图解
2020/06/11 Python
Django自带用户认证系统使用方法解析
2020/11/12 Python
使用phonegap获取设备的一些信息方法
2017/03/31 HTML / CSS
HTML5打开手机扫码功能及优缺点
2017/11/27 HTML / CSS
基于Python 函数和方法的区别说明
2021/03/24 Python
计算机系毕业生推荐信
2013/11/06 职场文书
水电站项目建议书
2014/05/12 职场文书
关于读书的演讲稿800字
2014/08/27 职场文书
因身体原因离职的辞职信范文
2015/05/12 职场文书
高中开学感言
2015/08/01 职场文书
如何用python插入独创性声明
2021/03/31 Python
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers