Scrapy爬虫框架简要启动流程

简要流程:

•startproject:创建一个新项目:
•genspider:根据模板生成一个新爬虫:
•crawl:执行爬虫:
•shell:启动交互式抓取控制台。

 

一.启动项目:

  1. $scrapy startproject example(项目名)
  2. $cd example(项目名)

生成文件结构后
• items .py: 该文件定义了待抓取域的模型。
• settings . py: 该文件定义了一些设置, 如用户代理、爬取延时等。
• spiders/: 该目录存储实际的爬虫代码。

二.定义模型(定义抓取数据域):

# -*- coding: utf-8 -*-
import scrapy


class ExampleItem(scrapy.Item):
    name = scrapy.Field()
    population = scrapy.Field()

三.创建爬虫:

CMD输入以下命令:

$ scrapy genspider country example.webscraping.com --template=crawl

自动在spider文件夹下生成爬虫模板

# -*- coding: utf-8 -*-
import scrapy
from scrapy.contrib.linkextractors import LinkExtractor
from scrapy.contrib.spiders import CrawlSpider, Rule

from example.items import ExampleItem


class CountrySpider(CrawlSpider):
    name = 'country'
    allowed_domains = ['example.webscraping.com']
    start_urls = ['http://example.webscraping.com/']

    rules = (
        Rule(LinkExtractor(allow='/index/', deny='/user/'), follow=True),
        Rule(LinkExtractor(allow='/view/', deny='/user/'), callback='parse_item')
    )

    def parse_item(self, response):
        item = ExampleItem()
        item['name'] = response.css('tr#places_country__row td.w2p_fw::text').extract()
        item['population'] = response.css('tr#places_population__row td.w2p_fw::text').extract()
        return item

•  name : 该属性为定义爬虫名称的字符串。
• s t a r t u r l s : 该属性定义了爬虫起始URL 列表。不过, s t a r t u r l s的默认值与我们想要的不一样, 在example.webscraping .com域名之前多了WWW 前缀。
• allowed domains : 该属性定义了可以爬取的域名列表。如果没有定义该属性, 则表示可以爬取任何域名。
• ru l e s : 该属性为一个正则表达式集合, 用于告知爬虫需要跟踪哪些链接。

优化设置

在example/settings.py中修改参数代码

CONCURRENT_REQUESTS_PER_DOMAIN=1    #设置并发数,同时只能对1个网址进行发送请求
DOWNLOAD_DELAY=5               #设置延迟5秒

测试爬虫:

$scrapy crawl country -s LOG_LEVEL=ERROR

 使用shell命令抓取数据域

使用shell命令行测试css抓取器的结果

$scrapy shell http://example.webscraping.com/view/United-Kingdom-239

 进入shell模式:

in[1]:response.url

in[2]:response.status

in[3]:response.css('tr#place_country_row td.w2p_fw::text')

in[4]:name_css='tr#place_country_row td.w2p_fw::text'

in[5]:response.css(namecss).extract()

测试完成后,修改country.py中的parse_item方法

    def parse_item(self, response):
        item = ExampleItem()
        item['name'] = response.css('tr#places_country__row td.w2p_fw::text').extract()
        item['population'] = response.css('tr#places_population__row td.w2p_fw::text').extract()
        return item

 四.输出结果:

$scrapy crawl country --output=countries.csv -s LOG_LEVEL=INFO

五.暂停和终止爬虫:

$scrapy crawl country -s LOG_LEVEL=DEBUG -s JOBDIR=crawls/country

运行命令后,按ctrl+c等待爬虫停止。

下次重启后,同样运行该条命令,继续爬取。*JOBDIR参数设置保存爬虫状态的文件夹,不同爬虫的状态要保存在不同文件夹内。

 

注意点和坑:

会碰到import item类会报错,找不到类

方法是

Scrapy爬虫框架简要启动流程_第1张图片

 

你可能感兴趣的:(笔记)