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之集合(set)
Sep 24 Python
对于Python装饰器使用的一些建议
Jun 03 Python
python实现中文转换url编码的方法
Jun 14 Python
python 读写中文json的实例详解
Oct 29 Python
高质量Python代码编写的5个优化技巧
Nov 16 Python
pandas 空的dataframe 插入列名的示例
Oct 30 Python
Python程序包的构建和发布过程示例详解
Jun 09 Python
记一次Django响应超慢的解决过程
Sep 17 Python
Python之字符串的遍历的4种方式
Dec 08 Python
python中把元组转换为namedtuple方法
Dec 09 Python
基于python实现银行管理系统
Apr 20 Python
python操作xlsx格式文件并读取
Jun 02 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 mssql 分页SQL语句优化 持续影响
2009/04/26 PHP
PHP实现图片上传并压缩
2015/12/22 PHP
laravel手动创建数组分页的实现代码
2018/06/07 PHP
iframe 自适应高度[在IE6 IE7 FF下测试通过]
2009/04/13 Javascript
js 表格隔行颜色
2009/12/02 Javascript
autoIMG 基于jquery的图片自适应插件代码
2011/03/12 Javascript
按钮JS复制文本框和表格的代码
2011/04/01 Javascript
js 动态修改css文件的方法
2014/08/05 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
深入理解jQuery之事件移除
2016/06/02 Javascript
AngularJS自定义插件实现网站用户引导功能示例
2016/11/07 Javascript
通过一个简单的例子学会vuex与模块化
2017/11/22 Javascript
nodejs中Express与Koa2对比分析
2018/02/06 NodeJs
vue checkbox 全选 数据的绑定及获取和计算方法
2018/02/09 Javascript
解决vuejs 使用value in list 循环遍历数组出现警告的问题
2018/09/26 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
js实现for循环跳过undefined值示例
2019/07/02 Javascript
javascript实现图片轮播代码
2019/07/09 Javascript
Python、Javascript中的闭包比较
2015/02/04 Python
Python使用matplotlib绘制余弦的散点图示例
2018/03/14 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
2018/07/18 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
Python如何使用内置库matplotlib绘制折线图
2020/02/24 Python
Django Model中字段(field)的各种选项说明
2020/05/19 Python
利用Python实现某OA系统的自动定位功能
2020/05/27 Python
结束运行python的方法
2020/06/16 Python
python爬取豆瓣电影排行榜(requests)的示例代码
2021/02/18 Python
全球酒店比价网:HotelsCombined
2017/06/20 全球购物
台湾最大网路书店:博客来
2018/03/18 全球购物
Ever New加拿大官网:彰显女性美
2018/10/05 全球购物
使用索引有什么好处
2016/07/27 面试题
国家励志奖学金获奖感言
2014/01/09 职场文书
幼教毕业生自我鉴定
2014/01/12 职场文书
2014年开学第一课活动方案
2014/03/06 职场文书
参观接待方案
2014/03/17 职场文书
netty 实现tomcat的示例代码
2022/06/05 Servers