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 相关文章推荐
在Python3中使用asyncio库进行快速数据抓取的教程
Apr 02 Python
详细讲解用Python发送SMTP邮件的教程
Apr 29 Python
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
Jun 15 Python
python+django加载静态网页模板解析
Dec 12 Python
Python字符串拼接六种方法介绍
Dec 18 Python
基于scrapy的redis安装和配置方法
Jun 13 Python
Python检查 云备份进程是否正常运行代码实例
Aug 22 Python
Python 中的 import 机制之实现远程导入模块
Oct 29 Python
python实现图片上添加图片
Nov 26 Python
pycharm不能运行.py文件的解决方法
Feb 12 Python
Python+unittest+requests 接口自动化测试框架搭建教程
Oct 09 Python
Python基础知识之变量的详解
Apr 14 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 array_merge下进行数组合并的代码
2008/07/22 PHP
火车头discuz6.1 完美采集的php接口文件
2009/09/13 PHP
一些需要禁用的PHP危险函数(disable_functions)
2012/02/23 PHP
MongoDB在PHP中的常用操作小结
2014/02/20 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
2017/06/06 PHP
PHP日志LOG类定义与用法示例
2018/09/06 PHP
php workerman定时任务的实现代码
2018/12/23 PHP
jqPlot 图表中文API使用文档及源码和在线示例
2012/02/07 Javascript
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
2012/03/01 Javascript
window.open的页面如何刷新(父页面)上层页面
2012/12/28 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
特殊情况下如何获取span里面的值
2014/05/20 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
2015/08/13 Javascript
AngularJS 如何在控制台进行错误调试
2016/06/07 Javascript
浅谈js对象的创建和对6种继承模式的理解和遐想
2016/10/16 Javascript
js自定义QQ菜单效果
2017/01/10 Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
2017/03/14 Javascript
基于jQuery实现Ajax验证用户名是否可用实例
2018/03/25 jQuery
vue3.0 CLI - 2.1 -  component 组件入门教程
2018/09/14 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
2019/04/17 Javascript
JS实现简单打字测试
2020/06/24 Javascript
Element InfiniteScroll无限滚动的具体使用方法
2020/07/27 Javascript
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
[05:36]DOTA2 2015国际邀请赛中国区预选赛第四日TOP10
2015/05/29 DOTA
[51:00]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
python网络编程学习笔记(10):webpy框架
2014/06/09 Python
python中随机函数random用法实例
2015/04/30 Python
举例讲解Python设计模式编程的代理模式与抽象工厂模式
2016/01/16 Python
python开发之str.format()用法实例分析
2016/02/22 Python
Python面向对象之继承和多态用法分析
2019/06/08 Python
一家专门经营包包的英国网站:MyBag
2019/09/08 全球购物
财务会计毕业生自荐信
2013/11/02 职场文书
公务员四风问题对照检查材料整改措施
2014/09/26 职场文书
2014企业年终工作总结
2014/12/23 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书
python多次执行绘制条形图
2022/04/20 Python