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生成随机mac地址的方法
Mar 16 Python
python爬虫headers设置后无效的解决方法
Oct 21 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
Nov 15 Python
python Crypto模块的安装与使用方法
Dec 21 Python
Python实现程序判断季节的代码示例
Jan 28 Python
用pyqt5 给按钮设置图标和css样式的方法
Jun 24 Python
python turtle库画一个方格和圆实例
Jun 27 Python
pytorch 固定部分参数训练的方法
Aug 17 Python
Python Sphinx使用实例及问题解决
Jan 17 Python
Python制作简易版小工具之计算天数的实现思路
Feb 13 Python
Python+OpenCV检测灯光亮点的实现方法
Nov 02 Python
python文件与路径操作神器 pathlib
Apr 01 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
re0第二季蕾姆被制作组打入冷宫!艾米莉亚女主扶正,原因唏嘘
2020/04/02 日漫
php中static静态变量的使用方法详解
2010/06/04 PHP
php漏洞之跨网站请求伪造与防止伪造方法
2013/08/15 PHP
Laravel 类和接口注入相关的代码
2019/10/15 PHP
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
2013/11/18 Javascript
jquery遍历checkbox介绍
2014/02/21 Javascript
a标签的href与onclick事件的区别详解
2014/11/12 Javascript
使用window.prompt()实现弹出用户输入的对话框
2015/04/13 Javascript
JavaScript中的setMilliseconds()方法使用详解
2015/06/11 Javascript
jQuery鼠标经过方形图片切换成圆边效果代码分享
2015/08/20 Javascript
跟我学习javascript的全局变量
2015/11/16 Javascript
js实现不重复导入的方法
2016/03/02 Javascript
jQuery遍历json的方法分析
2016/04/16 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
JS闭包与延迟求值用法示例
2016/12/22 Javascript
JavaScript实现动态增删表格的方法
2017/03/09 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
解决Mac下安装nmp的淘宝镜像失败问题
2018/05/16 Javascript
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
[03:00]DOTA2-DPC中国联赛1月18日Recap集锦
2021/03/11 DOTA
TensorFlow平台下Python实现神经网络
2018/03/10 Python
对tf.reduce_sum tensorflow维度上的操作详解
2018/07/26 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
python opencv实现简易画图板
2020/08/27 Python
python动态规划算法实例详解
2020/11/22 Python
英国最大的正宗复古足球衫制造商和零售商:TOFFS
2018/06/21 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
戴森西班牙官网:Dyson西班牙
2020/02/04 全球购物
运动会稿件200字
2014/02/07 职场文书
幼儿园社区活动总结
2014/07/07 职场文书
关于读书的演讲稿400字
2014/08/27 职场文书
2015个人简历自我评价语
2015/03/11 职场文书
面试通知短信
2015/04/20 职场文书
CSS实现章节添加自增序号的方法
2021/06/23 HTML / CSS
用php如何解决大文件分片上传问题
2021/07/07 PHP
漫画「狩龙人拉格纳」公开TV动画预告图
2022/03/22 日漫