scrapy再学习与第二个实例
这周对于Scrapy进一步学习,知识比较零散,需要爬取的网站因为封禁策略账号还被封了/(ㄒoㄒ)/~~
一、信息存储
1、log存储命令:scrapy crawl Test --logfile=test.log——把运行输出存入log当中
也可以在代码中定义要存储的内容:self.log("Fetch home page: %s" % response.url)
2、将结果存文件
(1)法1:代码里增加如下几条语句
# -*- coding: utf-8 -*-
from scrapy.spiders import CrawlSpider,Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.selector import Selector
from scrapy.item import Item
from qicha.items import QichaItem class QichachaSpider(CrawlSpider):
name = "qichacha"
allowed_domains = ["qichacha.com"] start_urls = [
'http://www.qichacha.com/search_hangye',
]
rules=(
Rule(LinkExtractor(allow=('/search_hangye\?&p=[0-9]+', ),)),
Rule(LinkExtractor(allow=('/firm\_[A-Z]{2}\w+', )), callback='parseCom'),
)
def parseCom(self,response):
print "********************************"
print response
sel=Selector(response)
items=[]
item=QichaItem()
item['name']='test'
item['website']='test'
items.append(item)
return items
三、带cookie的访问
有些网站需要登录才可见,换句话说只有登录了才可以去爬数据,在这种情况下,每次爬取页面的时候把cookie带在请求信息里就可以了,即使有验证码也不怕。
关于scrapy的cookie机制,我查资料的时候查到了一个cookielib包,因为懒没有去学,就是用最简单粗暴的方式把cookie加入请求信息当中,居然意外的可以。
(1)首先登陆网站,然后利用浏览器查看一下当前网站的cookie,以豆瓣和chrome浏览器为例
(2)把cookie那一串拷出来,改成"key":"value"的形式
(3)再在类中加入下面一段代码,即把cookie放在请求信息当中,就可以了(我下面的cookie是虚构的,换成自己的就可以了)
def start_requests(self):
for url in self.start_urls:
yield Request(url,cookies={'PHPSESSID':'trvet','think_language':'zh-cn','CNZZD':'1916428848-1450-%7676488','pspt':'%722pswd%22%3A%22661bbde70%22%2C%22_cod27%22%7D','SERVERID':'a66d7dffe|145202|1450'})

四、几点注意与疑问
(1)有些网站不让频繁爬取,那就看情况time.sleep(10)一下,具体睡眠时间视情况而定
(2)更严格的要切账号(也就是cookie)和加代理,关于如何切代理我接下来再总结
(3)最恐怖的是把账号给封禁了,就比如我现在爬取的网站,除了多注册几个账号还有其他方式吗?
(4)关于爬取规则,我现在也搞不懂Scrapy是按什么规则进行爬取的,深度优先?广度优先?先不谈加Rule,即使在最初start_urls定义了一串连续的url,结果爬取的时候却不是按序的,不知道为什么?
五、第二个案例
第二个案例现在还没弄完,是一个类似博客的网站,就假想成博客吧,第一层页面是博客列表,有n页;第二层页面是博客的具体内容,随便选一个例子。
1、法1:可以利用Rule
(1)start_urls只插入一条初始页面的url,strat_urls=['http://www.cnblogs.com/v-July-v/']
(2)定义两个Rule,若是博客正文页面的链接就爬取,若是博客列表的链接就存入url队列
2、法2:不用Rule,分两步爬取
(1)爬虫1:先把所有博客正文页面的链接爬取下来存入数据库或者文件中
(2)爬虫2:把第一步获取的链接作为strat_urls,进行内容爬取
这种方式的好处:可以加一个标记,标记页面是否爬过,这样就会使得整个爬虫过程可控一些,知道哪些爬过哪些没有爬过,第一种方式略乱一点对于我来说.....
scrapy再学习与第二个实例的更多相关文章
- Applet再学习
ZLYD团队Apllet学习笔记 Applet再学习 Applet是什么? Applet又称为Java小应用程序,是能够嵌入到一个HTML页面中,并且可通过Web浏览器下载和执行的一种Java类 .A ...
- FFmpeg再学习 -- 硬件加速编解码
为了搞硬件加速编解码,用了一周时间来看 CUDA,接下来开始加以总结. 一.什么是 CUDA (1)首先需要了解一下,什么是 CUDA. 参看:百度百科 -- CUDA 参看:CUDA基础介绍 参看: ...
- Selenium2学习-039-WebUI自动化实战实例-文件上传下载
通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a ...
- Selenium2学习-018-WebUI自动化实战实例-016-自动化脚本编写过程中的登录验证码问题
日常的 Web 网站开发的过程中,为提升登录安全或防止用户通过脚本进行黄牛操作(宇宙最贵铁皮天朝魔都的机动车牌照竞拍中),很多网站在登录的时候,添加了验证码验证,而且验证码的实现越来越复杂,对其进行脚 ...
- Selenium2学习-014-WebUI自动化实战实例-012-Selenium 操作下拉列表实例-div+{js|jquery}
之前已经讲过了 Selenium 操作 Select 实现的下拉列表:Selenium2学习-010-WebUI自动化实战实例-008-Selenium 操作下拉列表实例-Select,但是在实际的日 ...
- Selenium2学习-010-WebUI自动化实战实例-008-Selenium 操作下拉列表实例-Select
此文主要讲述用 Java 编写 Selenium 自动化测试脚本编写过程中,对下拉列表框 Select 的操作. 下拉列表是 Web UI 自动化测试过程中使用率非常高的,通常有两种形式的下拉列表,一 ...
- 学习KnockOut第二篇之Counter
学习KnockOut第二篇之Counter 欲看此 ...
- 《Python基础教程(第二版)》学习笔记 -> 第二章 列表和元组
本章将引入一个新的概念:数据结构. 数据结构是通过某种方式阻止在一起的数据元素的集合,这些数据元素可以是数字或者字符,设置可以是其他数据结构. Python中,最基本的数据结构是序列(Sequence ...
- Android再学习-20141022-Activity的生命周期
20141022-Android再学习 如何在一个应用程序当中定义多个Activity 定义一个类,继承Activity 在该类当中,复写Activity当中的onCreate方法.onCreate( ...
随机推荐
- [NOIP2016] 天天爱跑步 桶 + DFS
---题面--- 题解: 很久以前就想写了,一直没敢做,,,不过今天写完没怎么调就过了还是很开心的. 首先我们观察到跑步的人数是很多的,要一条一条的遍历显然是无法承受的,因此我们要考虑更加优美的方法. ...
- C++STL简介
本文仅仅是个人学习的过程中结合网上博文,对STL的整理,也仅仅是简介.仅为个人学习笔记. 一.STL简介(摘自:晨光(Morning)) STL(Standard Template Library), ...
- 从零开始学Linux系统(二)之基本操作指令
ifconfigping ip地址帮助:ping -t ip地址ping -c 次数 ip地址ping -s 包的大小关机重启:shutdown -h now reboot清屏:clear == C ...
- SpringAOP简介
AOP(Aspect Orient Programming) --- 面向切面编程 将分散在各个业务逻辑中的相同代码 通过 “横向”切割方式抽取到独立模块中 方式抽取到独立模块中;[它针对的是程序运行 ...
- ExtJs在页面上window再调用Window的事件处理
今天在开发Ext的过程中遇到了一个恶心的问题,就是在ext.window页面,点击再次弹出window时,gridpanel中的store数据加载异常,不能正常被加载,会出现缓存,出现该问题,是因为w ...
- Ubuntu16.04+Cuda8.0+1080ti+caffe+免OpenCV3.2.0+faster-rCNN教程
一.事先声明:1.Ubuntu版本:Ubuntu使用的是16.04.而不是16.04.1或16.04.2,这三个是有区别的.笔者曾有过这样的经历,Git上一个SLAM地图构建程序在Ubuntu14.0 ...
- stout代码分析之十一:hashmap和multihashmap
hashmap是std::unordered_map的子类,前者对后者的接口做了进一步封装. hashmap的移动构造函数: hashmap(std::map<Key, Value>&am ...
- HDU1394 逆序数
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- Cropper
jQuery.cropper是一款使用简单且功能强大的图片剪裁jQuery插件.该图片剪裁插件支持图片放大缩小,支持图片旋转,支持触摸屏设备,支持canvas,并且支持跨浏览器使用. 官网:https ...
- springboot整合thumbnailator实现图片压缩
springboot整合thumbnailator实现图片压缩 前言 最近由于首页产品列表图片显示太慢,经过研究发现是用户上传的图片太大. 针对这个问题,想到的解决方案是: 1. 产品上传时,限定图片 ...