scrapy的简单学习
来源:互联网 发布:淘宝开店 营业执照 编辑:程序博客网 时间:2024/05/12 14:16
scrapy
功能很强大,但我学习的是入门级别的
http://docs.pythontab.com/scrapy/scrapy0.24/topics/selectors.html中文官方文档
http://blog.csdn.net/qq_30242609/article/details/52810840 参考博客教程
http://blog.csdn.net/column/details/younghz-scrapy.html 参考博客教程(比较有深度)
安装过程比较麻烦。。。因为此包是比较高级的包,它是在很多包的基础之上工作的
安装过程参考http://cuiqingcai.com/1052.html
下面是scrapy的工作原理
这是实例解释
在命令提示符下创建scrapy项目之后自动生成1-4文件
这里以我写的爬贴吧贴子为例,但是有个未解决问题,这里爬下来的每个页面之间是们没有顺序的。。。
1 是写爬虫的
2是写数据的
类型于这样,定义想要获取的内容
class StiebaItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() comment=scrapy.Field() name=scrapy.Field()
但是我写的爬虫里面并没有调用它。。。因为我只需要评论直接写入文件就好了
3是处理获得数据的
类型于这样。。。也可以写入数据库什么的。。我同样没有用到
def process_item(self, item, spider): file = open("item.txt", "a") # 以追加的方式打开文件,不存在则创建 item_string = str(item).decode("unicode_escape").encode('utf-8') file.write(item_string) file.write('\n') file.close()
4是写入固定不变的配置的,例如Header,并且添加才能用pipelines文件
ITEM_PIPELINES = {'stieba.pipelines.StiebaPipeline': 300}
5是我添加的,加入一行代码,替换掉在命令行内启动,运行时直接选择这个文件就行了
from scrapy import cmdlinecmdline.execute("scrapy crawl sstieba".split())
以下是我第一个用scrapy写的小代码
在spiders文件夹下添加tieba_spider.py文件
#coding=utf-8from scrapy.spider import Spiderfrom scrapy.selector import Selectorfrom scrapy import Requestfrom stieba.items import StiebaItemimport reclass TiebaSpider(Spider): name = 'sstieba'#执行命令的时候的爬虫的名字 allowed_domains=['tieba.baidu.com']#限制访问的域名,可以多个 start_urls=['http://tieba.baidu.com/f?kw=%E7%9F%B3%E5%AE%B6%E5%BA%84%E5%B8%82%E7%9F%BF%E5%8C%BA%E4%B8%AD%E5%AD%A6&fr=index']#开始的地址 def start_requests(self):#这是重写的方法 不需要手动调用 print 'kaishi' yield Request(self.start_urls[0],callback=self.aparse,)#多线程,请求 def aparse(self, response): print 'pachong' selector = Selector(response) print selector,'zheli' tiezi_urls=selector.xpath('//div[@class="threadlist_title pull_left j_th_tit "]/a/@href') tieba_page=selector.xpath('//span[@class="pagination-current pagination-item "]/following-sibling::a[1]/@href').extract() print tieba_page,'xiayiye' print tiezi_urls for tiezi_url in tiezi_urls: url='http://tieba.baidu.com'+str(tiezi_url.extract()) print '贴吧地址',url yield Request(url,callback=self.page) if tieba_page[0]: yield Request(tieba_page[0], callback=self.aparse) print 'tiebaxiayiye',tieba_page[0] def page(self,response): selector = Selector(response) item = StiebaItem()#没用上 也可以用这里来处理所得的内容 name = selector.xpath('//h1[@class="core_title_txt "]/@title').extract()[0] od = open('item.txt', 'a') od.write(name.encode('utf-8')+'\n') page=selector.xpath('//span[@class="red"]/text()').extract()[1].encode('utf-8') print response.url,page for i in range(1,int(page)+1): yield Request(response.url+'?pn='+str(i),callback=self.tiezi_parse) def tiezi_parse(self,response): selector=Selector(response) od = open('item.txt', 'a') pilus=selector.xpath('//div[@class="d_post_content j_d_post_content clearfix"]').extract() for pilu in pilus: pilua=pilu.encode('utf-8') reg=re.compile('arfix"> (.*)</div>') pilub=re.findall(reg,pilua) pasl=re.sub(r'<br>', '',pilub[0]) print pasl od.write(pasl+'\n')
其实其他文件不用做改动就能运行了。。。
在我的理解scrapy与我之前学习的大跃进就是创建工程了,不再是单个文件实现各种功能了
还有就是速度比bs快的多,因为它是多线程的,资源使用率提高很多速度就变快了
其它的优势还有很多,不过由于我学的太浅了,还没有体会出来
- scrapy的简单学习
- 爬虫 scrapy 框架学习 1. Scrapy框架业务逻辑的理解 + 简单爬虫案例示范
- Scrapy框架学习(三)----基于Scrapy框架实现的简单爬虫案例
- scrapy框架学习-实现一个简单的爬虫程序
- 基于scrapy的简单爬虫
- 一个简单的scrapy爬虫
- 2.1 scrapy框架的学习
- python中scrapy的学习
- 【scrapy】学习Scrapy入门
- <scrapy>scrapy入门学习
- 【scrapy】学习Scrapy入门
- 【Scrapy】学习记录1_一个基本的Scrapy项目
- scrapy初探:写一个简单的爬虫
- scrapy简单的反爬虫方法总结
- scrapy setting一些简单的配置
- scrapy-02:创建工程项目的简单步骤
- scrapy学习——xpath的学习
- Scrapy学习
- Sublime Text 3 快捷键汇总
- singleLine=”true” 和 maxLines=”1″
- 兼容新问题
- thinkphp3.23开发的“二当家的”通用CMS系统
- python用递归实现汉诺塔问题
- scrapy的简单学习
- VMware 中的操作系统切换模式后总是连接不上互联网可能的问题之一
- leetcode--Invert Binary Tree
- 国内权益标收益率的“尖峰厚尾”现象研究
- java 设计模式之 -- 工厂模式
- MQTT中的Remaining Length计算方式(php版)
- 编程珠玑 第10/11/12章
- 正则表达式之基本概念
- java版超市管理系统。swing~(java连接mysql数据库)