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基于xml parse实现解析cdatasection数据
Sep 30 Python
简单介绍Python中的RSS处理
Apr 13 Python
Python升级导致yum、pip报错的解决方法
Sep 06 Python
python添加模块搜索路径方法
Sep 11 Python
深入理解Python中的super()方法
Nov 20 Python
用python实现百度翻译的示例代码
Mar 09 Python
Python中矩阵创建和矩阵运算方法
Aug 04 Python
使用Python做定时任务及时了解互联网动态
May 15 Python
python面试题之列表声明实例分析
Jul 08 Python
Spring实战之使用util:命名空间简化配置操作示例
Dec 09 Python
Python的logging模块基本用法
Dec 24 Python
Python中的xlrd模块使用整理
Jun 15 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数组函数序列之in_array() 查找数组值是否存在
2011/10/29 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
2016/06/12 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
2017/06/05 PHP
innerHTML 和 getElementsByName 在IE下面的bug 的解决
2010/04/09 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
jquery.cookie用法详细解析
2013/12/18 Javascript
JQuery 实现在同一页面锚点链接之间的平滑滚动
2014/10/29 Javascript
详谈jQuery中的this和$(this)
2014/11/13 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
2015/08/27 Javascript
JS 获取HTML标签内的子节点的方法
2016/09/21 Javascript
JavaScript 最佳实践:帮你提升代码质量
2016/12/03 Javascript
easyui关于validatebox实现多重规则验证的方法(必看)
2017/04/12 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
2017/04/22 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
swiper在vue项目中loop循环轮播失效的解决方法
2018/09/15 Javascript
只有 20 行的 JavaScript 模板引擎实例详解
2020/05/11 Javascript
python算法演练_One Rule 算法(详解)
2017/05/17 Python
django创建自定义模板处理器的实例详解
2017/08/14 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
对Python中DataFrame选择某列值为XX的行实例详解
2019/01/29 Python
将Python字符串生成PDF的实例代码详解
2019/05/17 Python
Python列表与元组的异同详解
2019/07/02 Python
pycharm 安装JPype的教程
2019/08/08 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
2019/12/23 Python
Python 支持向量机分类器的实现
2020/01/15 Python
django 前端页面如何实现显示前N条数据
2020/03/16 Python
利用 PyCharm 实现本地代码和远端的实时同步功能
2020/03/23 Python
Python利用Xpath选择器爬取京东网商品信息
2020/06/01 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
英国最大的自有市场,比亚马逊便宜:Flubit
2019/03/19 全球购物
越南母婴用品购物网站:Kids Plaza
2020/04/09 全球购物
计算机应用专业毕业生求职信
2014/06/03 职场文书
网站推广策划方案
2014/06/04 职场文书
宾馆仓管员岗位职责
2014/07/27 职场文书
居委会工作总结2015
2015/05/18 职场文书
校运会宣传稿大全
2015/07/23 职场文书