python爬虫使用scrapy注意事项


Posted in Python onNovember 23, 2020

在学习中,如果遇到问题把它们都收集整理出来,长期保存之后也是一份经验之谈。小编跟大家讲了这么久的scrapy框架,在自己学习的整理和小伙伴们的交流反馈中也累积了不少心得。想着有些小伙伴在python学习的时候有点丢三落四的毛病,特意整理出来scrapy在python爬虫使用中需要注意的事项,大家一起看看吧。

1.如果需要大批量分布式爬取,建议采用Redis数据库存储,可安装scrapy-redis,使用redis数据库来替换scrapy原本使用的队列结构(deque),并配合其它数据库存储,例如MySQL或者MongoDB,爬取效率将会极大提高。并且其自带的dupefilter.py负责执行requst的去重,使用redis的set数据结构,通过settings文件正确设置后,即便停止scrapy爬虫,当下次重新开始后也能自动去重。原因就是在redis已经存储了request的信息。

2.当涉及到代理IP,Headers头中间请求信息处理的时候,可以通过中间件Middleware来实现。Spider中间件是介入到Scrapy的spider处理机制的钩子框架,可以添加代码来处理发送给 Spiders的response及spider产生的item和request。

3.合理设置settings文件,需要熟练掌握settings的各种设置。

4.可以重新定义def start_requests(self)函数来加载cookie信息,form信息的提交用scrapy.FormRequest以及scrapy.FormRequest.from_response这两个函数,scrapy.FormRequest.from_response能实现自动提交form数据。

5.采用Scrapy+phantomJS。 downloadMiddleware 对从 scheduler 送来的 Request 对象在请求之前进行预处理,可以实现添加 headers, user_agent,还有 cookie 等功能 。但也可以通过中间件直接返回 HtmlResponse 对象,略过请求的模块,直接扔给 response 的回调函数处理。

class CustomMetaMiddleware(object):
  def process_request(self,request,spider):
    dcap = dict(DesiredCapabilities.PHANTOMJS)   
    dcap["phantomjs.page.settings.loadImages"] = False 
    dcap["phantomjs.page.settings.resourceTimeout"] = 10
    driver = webdriver.PhantomJS("D:xx\xx",desired_capabilities=dcap)
    driver.get(request.url)
    body = driver.page_source.encode('utf8')
    url = driver.current_url
    driver.quit()
    return HtmlResponse(request.url,body=body)

到此这篇关于python爬虫使用scrapy注意事项的文章就介绍到这了,更多相关scrapy在python爬虫使用中需要注意什么内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
分析并输出Python代码依赖的库的实现代码
Aug 09 Python
python编程开发之类型转换convert实例分析
Nov 13 Python
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
Nov 24 Python
Python中sort和sorted函数代码解析
Jan 25 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
Feb 07 Python
Django使用 Bootstrap 样式修改书籍列表过程解析
Aug 09 Python
如何关掉pycharm中的python console(图解)
Oct 31 Python
python取均匀不重复的随机数方式
Nov 27 Python
python dataframe NaN处理方式
Dec 26 Python
python退出循环的方法
Jun 18 Python
matplotlib之pyplot模块实现添加子图subplot的使用
Apr 25 Python
python中if和elif的区别介绍
Nov 07 Python
python爬虫筛选工作实例讲解
Nov 23 #Python
python爬虫用scrapy获取影片的实例分析
Nov 23 #Python
python爬虫scrapy图书分类实例讲解
Nov 23 #Python
scrapy处理python爬虫调度详解
Nov 23 #Python
利用Python将多张图片合成视频的实现
Nov 23 #Python
Python系统公网私网流量监控实现流程
Nov 23 #Python
Python 调用 ES、Solr、Phoenix的示例代码
Nov 23 #Python
You might like
非常实用的php弹出错误警告函数扩展性强
2014/01/17 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
2014/04/29 PHP
extjs 列表框(multiselect)的动态添加列表项的方法
2009/07/31 Javascript
javascript 清空form表单中某种元素的值
2009/12/26 Javascript
js读取本地excel文档数据的代码
2010/11/11 Javascript
jquery 年会抽奖程序
2011/12/22 Javascript
JS完成代码前最好对其做5件事
2013/04/07 Javascript
Js日期选择器并自动加入到输入框中示例代码
2013/08/02 Javascript
JS操作Cookie写入和读取实例代码
2013/10/20 Javascript
使用Node.js为其他程序编写扩展的基本方法
2015/06/23 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
2016/11/04 Javascript
jQuery实现移动端Tab选项卡效果
2017/03/15 Javascript
JS实现前端缓存的方法
2017/09/21 Javascript
详解vue 计算属性与方法跟侦听器区别(面试考点)
2018/04/23 Javascript
Angularjs Ng_repeat中实现复选框选中并显示不同的样式方法
2018/09/12 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
2019/05/01 Javascript
jQuery层叠选择器用法实例分析
2019/06/28 jQuery
解决vue-cli 打包后自定义动画未执行的问题
2019/11/12 Javascript
微信小程序 this.triggerEvent()的具体使用
2019/12/10 Javascript
使用Vant完成通知栏Notify的提示操作
2020/11/11 Javascript
[44:51]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第二场
2018/04/05 DOTA
python之模拟鼠标键盘动作具体实现
2013/12/30 Python
Python实现扫描指定目录下的子目录及文件的方法
2014/07/16 Python
Python画图学习入门教程
2016/07/01 Python
Python安装官方whl包和tar.gz包的方法(推荐)
2017/06/04 Python
对变量赋值的理解--Pyton中让两个值互换的实现方法
2017/11/29 Python
python提取log文件内容并画出图表
2019/07/08 Python
python 匿名函数与三元运算学习笔记
2020/10/23 Python
一站式跨境收款解决方案:Payoneer(派安盈)
2018/09/06 全球购物
澳大利亚宠物食品和用品商店:PETstock
2020/01/02 全球购物
电信营业员岗位职责
2015/04/14 职场文书
老人院义工活动感想
2015/08/07 职场文书
win10安装配置nginx的过程
2021/03/31 Servers
mysql查询的控制语句图文详解
2021/04/11 MySQL
解决golang在import自己的包报错的问题
2021/04/29 Golang
opencv检测动态物体的实现
2021/07/21 Python