scrapy爬虫框架的使用

windows下安装scrapy:
需要预装很多软件,参考下面博客:
当安装完所有需要的软件后,对于python2.7及以上版本,以自动安装pip工具,可在cmd下使用命令pip install Scrapy直接安装即可,输入scrapy验证是否安装正确

如果网站提供API直接获取数据,会比较方便,不用爬虫,如天气网站API,如:
关于scrapy和Beautiful Soup的使用,可 参考 官网和例子:
scrapy中使用 Beautiful Soup爬天气例子: http://www.cnblogs.com/lurenjiashuo/p/scrapy-get-weather.html
有些网站scrapy爬不下来, 可以在设置中修改一下爬虫的 USER_AGENT 和 Referer 信息,增加爬虫请求的时间间隔。或者不用scrapy,自己写爬虫程序。

常用命令:
1.创建您的Scrapy项目: scrapy startproject myproject
该命令将会在 myproject 目录中创建一个Scrapy项目
2. 使用spider进行爬取。 scrapy crawl myspider -o file.csv/json等
3.下载给定的URL,并将获取到的内容送到标准输出。scrapy fetch <url>

scrapy爬虫过程详解:
1.定义容器item,即想要抓取的数据
创建一个 scrapy.Item 类, 并且定义类型为 scrapy.Field 的类属性来定义一个Item。
import scrapy
class Website(scrapy.Item):
url=scrapy.Field()
name=scrapy.Field()
description=scrapy.Field()
size=scrapy.Field()
2.编写爬虫Spider,必须继承 scrapy.Spider 类, 且定义以下三个属性:
  1. name: 用于区别Spider。 该名字必须是唯一的,您不可以为不同的Spider设定相同的名字。 
  2. start_urls: 包含了Spider在启动时进行爬取的url列表。每个初始URL会初始化Request,完成下载后生成的 Response 对象将会作为唯一的参数传递给parse函数。response返回的是url
  3. parse() 是spider的一个方法。该方法负责解析返回的数据(Response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象。
在回调函数内,您可以使用  选择器(Selectors)  (您也可以使用BeautifulSoup, lxml 或者您想用的任何解析器) 来分析网页内容,并根据分析的数据生成item。以Xpath为例:
使用 XPath 来从页面的HTML源码中选择需要提取的数据
例如:
    种子的描述是被包含在 id="description" 的 <div> 标签中:
<div id="description">
Short documentary made for Plymouth City Museum and Art Gallery regarding the setup of an 
对应获取描述的XPath表达式: //div[@id='description']
    文件大小的信息包含在 id=specifications 的 <div> 的第二个 <p> 标签中:
选择文件大小的XPath表达式:  //div[@id='specifications']/p[2]/text()[2]
例子spider程序:
import scrapy
from dirbot.items import Website 

class DmozSpider(scrapy.Spider): 
    name = "dmoz"         # 必须是唯一的,常用该网站domain命名spider
    allowed_domains = ["dmoz.org"]   # 可选。包含了spider允许爬取的域名(domain)列表(list)。
    start_urls = [ 
        " http://www.dmoz.org/Computers/Programming/Languages/Python/Books/", 
        " http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
    ] 

    def parse(self, response):    #  负责处理response并返回处理的数据以及跟进的URL
        #items = [] 
        for site in response.xpath('//ul[@class="directory-url"]/li') :
            item = Website() 
            item['name'] = site.xpath('a/text()').extract() 
            item['url'] = site.xpath('a/@href').extract() 
            item['description'] = site.xpath('text()').re('-\s[^\n]*\\r') 
            yield item
            #items.append(item) 
        #return items

3.    Item pipline
上面只是把数据保存在json文件中了,如果我们想自己保存在文件或数据库中,这里就要用到 Item Pipeline 了,当Item在Spider中被收集之后,它将会被传递到Item Pipeline中,每个item pipeline组件都需要调用 process_item(item, spider) 方法,这个方法必须返回一个 Item (或任何继承类)对象, 或是抛出 DropItem异常,被丢弃的item将不会被之后的pipeline组件所处理。

写好ITEM_PIPELINES后,还有很重要的一步,就是把 ITEM_PIPELINES  添加到设置文件 settings.py 中。
ITEM_PIPELINES = {
    'myproject.pipelines.PricePipeline': 300,
    'myproject.pipelines.JsonWriterPipeline': 800,
}
分配给每个类的整型值,确定了他们运行的顺序,item按数字从低到高的顺序,通过pipeline,通常将这些数字定义在0-1000范围内。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值