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,进行内容爬取
这种方式的好处:可以加一个标记,标记页面是否爬过,这样就会使得整个爬虫过程可控一些,知道哪些爬过哪些没有爬过,第一种方式略乱一点对于我来说.....
最新文章
- DOM2级提供的对DOM结构执行深度优先遍历 笔记
- java线程池ThreadPoolExecutor使用简介
- iOS10推送必看UNNotificationServiceExtension
- 学习笔记--【转】Parameter与Attribute的区别&;servletContext与ServletConfig区别
- (转)asp.net动态设置标题title 关键字keywords 描述descrtptions
- 201521123051《Java程序设计》第七周学习总结
- js_2_json
- vue实现简单的购物车功能
- mac 常用终端命令
- C# 线程中使用delegate对控件进行操作
- Cracking The Coding Interview 9.1
- Spring Cloud(Dalston.SR5)--Ribbon 中间层负载均衡
- learning docker steps(4) ----- docker swarm 初次体验
- 基于JS的文本验证
- [Swift实际操作]七、常见概念-(2)点CGPoint和变形CGAffineTransform的使用
- vue 打印页面部分区域
- Coreseek安装测试配置指南(转)
- mysql5.7用户密码策略问题
- 安装GCC-8.3.0及其依赖
- 开源静态分析工具androguard体验
热门文章
- 【题解】JXOI2017颜色
- Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) A B 水 搜索
- Codeforces Round #344 (Div. 2) B
- SQL Server作业没有执行的解决方法
- Difference between List View and DataGrid in WPF
- easing.js让页面动画丰富起来
- python 面试题(1)
- SpringBoot打war包并部署到tomcat下运行
- Inner join case when
- Cppcheck代码分析上