scrapy的简单学习

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 cmdline

cmdline.execute("scrapy crawl sstieba".split())

以下是我第一个用scrapy写的小代码
在spiders文件夹下添加tieba_spider.py文件

#coding=utf-8
from scrapy.spider import Spider
from scrapy.selector import Selector
from scrapy import Request
from stieba.items  import StiebaItem
import re
class 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快的多,因为它是多线程的,资源使用率提高很多速度就变快了
其它的优势还有很多,不过由于我学的太浅了,还没有体会出来

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值