scrapy爬蟲自動爬取的執行個體

來源:互聯網
上載者:User

Spider爬取過程

以初始的URL初始化Request,並設定回呼函數。當該request下載完畢並返回時,將產生response,並作為參數傳遞給該回呼函數。
spider中初始的request是通過調用start_requests()來擷取的。start_request()讀取start_urls中的URL,並以parse為回呼函數產生Request。
在回呼函數內分析返回的(網頁)內容,返回 Item 對象或者 Request 或者一個包括二者的可迭代容器。返回的Request對象之後會經過Scrapy處理,下載相應的內容並調用設定的callback函數(函數可相同)。
在回呼函數內,您可以使用選取器(Selector、BeautifulSoup、lxml等)來分析網頁內容,並根據分析的資料產生item。
最後,由spider返回的item將被存到資料庫(由某些Item Pipeline處理)或使用 Feed exports存入到檔案中。
Spider範例

 代碼如下 複製代碼

import scrapy
from myproject.items import MyItem

class MySpider(scrapy.Spider):
    '''
    一個回呼函數中返回多個Request對象和Item
    '''
    name = 'example.com'
    allowed_domains = ['example.com']
    start_urls = [
        'http://www.example.com/1.html',
        'http://www.example.com/2.html',
        'http://www.example.com/3.html',
    ]

    def parse(self, response):
        sel = scrapy.Selector(response)
        for h3 in response.xpath('//h3').extract():
            yield MyItem(title=h3)         

        for url in response.xpath('//a/@href').extract():
            yield scrapy.Request(url, callback=self.parse)

CrawlSpider範例

 代碼如下 複製代碼

import scrapy
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor
 
class MySpider(CrawlSpider):
    name = 'example.com'
    allowed_domains = ['example.com']
    start_urls = ['http://www.example.com']
 
    # 在如下的規則中,第一條表示匹配category.php但是不匹配subsection.php(沒有callback意味著follow為True表示跟進連結)
   
    # 在如下的規則中,第二條表示表示匹配item.php,並使用spider的parse_item方法進行分析。
   
    rules = (
        Rule(LinkExtractor(allow=('category\.php', ), deny=('subsection\.php', ))),
        Rule(LinkExtractor(allow=('item\.php', )), callback='parse_item'),
    )
 
    def parse_item(self, response):
        self.log('Hi, this is an item page! %s' % response.url)
 
        item = scrapy.Item()
        item['id'] = response.xpath('//td[@id="item_id"]/text()').re(r'ID: (\d+)')
        item['name'] = response.xpath('//td[@id="item_name"]/text()').extract()
        item['description'] = response.xpath('//td[@id="item_description"]/text()').extract()
        return item

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.