Scrapy爬虫框架学习笔 一

来源:互联网 发布:freebsd rc.d python 编辑:程序博客网 时间:2024/05/22 13:47

Scrapy爬虫框架学习笔 一

本文主要是Scrapy爬虫框架学习的笔记。因为有一部分自己的理解,带有强烈的自主看法可能会与客观的事实有所偏差。如有不对的请与我联系。
QQ邮箱:735566414@qq.com

  • 对于Scrapy爬虫框架的理解
  • 项目文件目录的分析
  • Scrapy爬虫框架的基本使用方法

对于Scrapy爬虫框架的理解

Scrapy框架是对爬虫项目的抽象化。抽象了在具体项目中具体的业务实现。使我们在具体项目中可以更专注于业务逻辑。不用平凡的去关注具体的网页访问、具体的网页代码与数据的分离、多线程的具体实现。
更多的请关注:
Scrapy中文手册


项目文件目录的分析

Scrapy爬虫项目
这里写图片描述

目录说明

spiders:保存爬虫的的目录。(可以有多个爬虫)
items.py:定义数据类

例:

import scrapyfrom scrapy.item import Fieldfrom scrapy.item import Itemclass DmozItem(scrapy.Item):    title = scrapy.Field()    link = scrapy.Field()class ImageItem(scrapy.Item):    image_urls = scrapy.Field()    images = scrapy.Field()    image_paths = scrapy.Field()

pipelines.py:定义了数据类的处理和预处理.(对数据可以做预处理。清除掉不需要的数据。)注意:要想数据处理类起作用还要在项目配置文件中配置。

例:

#去到空数据class TuinvlanPipeline(object):    def process_item(self, item, spider):        #需要的数据返回,不需要用raise返回        if len(item['link'])>=1:            #item['title']=item['title'][0].decode("utf-8")            #item['title']= httplib2.urllib.parse.unquote(item['title'][0])            return item        else:            raise DmozItem("Missing price in %s" % item)

settings.py:是项目的配置文件。


Scrapy爬虫框架的基本使用方法

  • 1、生成scrapy项目

    在dos命令行中输入 scrapy startproject projectName(项目的名称)

  • 2、编写数据类

import scrapyfrom scrapy.item import Fieldfrom scrapy.item import Itemclass DmozItem(scrapy.Item):    title = scrapy.Field()    link = scrapy.Field()class ImageItem(scrapy.Item):    image_urls = scrapy.Field()    images = scrapy.Field()    image_paths = scrapy.Field()

title 引用数据是的名字
例:item=DmozItem()
DmozItem[“title”]=”title”
官方说明


  • 3、编写继承父类的类

spiders目录下init.py编写爬虫类
这里是一爬一个图片网站的图片为例。
要写一个使用爬虫框架要想继承它的Spider类。(还有其他的几种爬虫类。)
例:

import scrapyfrom scrapy.spiders.crawl import Rulefrom tuinvlan.items import ImageItemfrom scrapy.http.request import Requestfrom scrapy.loader import ItemLoaderfrom public import appendfrom scrapy.http import requestfrom scrapy.spiders import CrawlSpider, Rulefrom scrapy.linkextractors import LinkExtractorfrom tuinvlan.items import DmozItemclass DmozSpider(scrapy.spiders.Spider):    name = "dmoz"    start_urls = [        "http://www.tuyimm.com/forum-14-1.html",    ]    def parse(self, response):        #主题栏URL提取        uurl=response.xpath('//a[@hidefocus="true"]/@href')        for url in uurl:            #回调parse方法            yield scrapy.Request(url.extract(),callback=self.parse)         url1=response.xpath('//*[@class="nxt"]/@href')        for u in url1:                        yield scrapy.Request(u.extract(),callback=self.parse)                for a in response.xpath('//*[@id="waterfall"]/li/div/a[@class="preview"]'):            links= a.xpath('@href').extract()            for link in links:               xiangqing=scrapy.Request(link,callback=self.parse_xiangqing)               yield xiangqing        #url1=response.css('.nxt')[0].xpath('@href')        #if url1 != None:        #    scrapy.Request(url1,callback=self.parse1)    def parse_xiangqing(self,response):        l = ItemLoader(item=DmozItem(), response=response)        l.add_xpath('link','//*[@class="lazy"]/@zoomfile')        l.add_xpath('title','//*[@id="thread_subject"]/text()')        #//*[@id="aimg_190357"]        #//*[@id="thread_subject"]        return l.load_item()    def parse_1(self,response):        for a in response.css('.preview'):            yield a.xpath('@href').extract()class LuSe(scrapy.spiders.CrawlSpider):    name = '356e.info'    allowed_domains = ['356e.info']    start_urls = ['http://www.356e.info/?page=1']    rules = (        # 提取匹配 'category.php' (但不匹配 'subsection.php') 的链接并跟进链接(没有callback意味着follow默认为True)        Rule(LinkExtractor(allow=('\?page='))),        # 提取匹配 'item.php' 的链接并使用spider的parse_item方法进行分析        Rule(LinkExtractor(allow=('vod/', )), callback='parse_item'),    )    def parse_item(self, response):        for res in response.xpath('//*[@id="ckplayer_a1"]/param[7]/@value'):            #创建了数据类的一个实例            item= DmozItem()            item['link']=res            yield item

name = “dmoz”这里定义了爬虫的名字。这个名字要是唯一的名字,不能与其他的一样
start_urls = [“http://www.tuyimm.com/forum-14-1.html“,]定义了爬虫的起始位置。
def parse(self, response)方法这里覆盖了父类的parse方法。一个爬虫类在开始这个方法是入口。

3、编写数据处理类

在项目根目录下pipelines.py编写数据处理类
该类必须实现def process_item(self, item, spider):方法。
例:

#去到空数据class TuinvlanPipeline(object):    def process_item(self, item, spider):        #需要的数据返回,不需要用raise返回        if len(item['link'])>=1:            return item        else:            raise DmozItem("Missing price in %s" % item)

item参数是定义数据类的实例。
spider是返回数据类实例的爬虫类实例。


  • 4、设置项目文件

在项目根目录下settings.py*中配置项目的配置项
在这里我们是把数据处理的类加入项目中

ITEM_PIPELINES = {
‘myproject.pipelines.PricePipeline’: 300,
‘myproject.pipelines.JsonWriterPipeline’: 800,}

这里的300800是数据处理类执行的运行的顺序,item按数字从低到高的顺序,通过pipeline,通常将这些数字定义在0-1000范围内。


  • 5、启动项目

在项目根目录的上级目录dos命令行中输入scrapy crawl dmoz
dmoz是定义的爬虫名字。

原创粉丝点击