簡體   English   中英

如何將scrapy spider的項目追加到列表中?

[英]How to append items from scrapy spider to list?

我正在使用一個基本的蜘蛛,它可以從網站上的鏈接中獲取特定信息。 我的代碼如下所示:

import sys
from scrapy import Request
import urllib.parse as urlparse
from properties import PropertiesItem, ItemLoader
from scrapy.crawler import CrawlerProcess    

class BasicSpider(scrapy.Spider):
    name = "basic"
    allowed_domains = ["web"]
    start_urls = ['www.example.com']
    objectList = []
    def parse(self, response):
        # Get item URLs and yield Requests
        item_selector = response.xpath('//*[@class="example"]//@href')
        for url in item_selector.extract():
            yield Request(urlparse.urljoin(response.url, url), callback=self.parse_item, dont_filter=True)

    def parse_item(self, response):
        L = ItemLoader(item=PropertiesItem(), response=response)
        L.add_xpath('title', '//*[@class="example"]/text()')
        L.add_xpath('adress', '//*[@class="example"]/text()')
        return L.load_item()

process = CrawlerProcess()
process.crawl(BasicSpider)
process.start()

我現在想要的是將每個類實例“ L”附加到名為objectList的列表中。 我嘗試通過更改代碼來做到這一點:

    def parse_item(self, response):
        global objectList
        l = ItemLoader(item=PropertiesItem(), response=response)
        l.add_xpath('title', '//*[@class="restaurantSummary-name"]/text()')
        l.add_xpath('adress', '//*[@class="restaurantSummary-address"]/text()')
        item = l.load_item()
        objectList.append([item.title, item.adress])
        return objectList       

但是,當我運行此代碼時,我收到一條消息:

l = ItemLoader(item=PropertiesItem(), response=response)
NameError: name 'PropertiesItem' is not defined

問:如何將刮板找到的每個項目附加到列表objectList?

編輯:

我想將結果存儲在列表中,因為然后可以像這樣保存結果:

import pandas as pd
table = pd.DataFrame(objectList)   
writer = pd.ExcelWriter('DataAll.xlsx')
table.to_excel(writer, 'sheet 1')
writer.save()

要保存結果,你應該使用的文檔中描述scrapy的飼料出口商功能在這里

實施抓取工具時最常需要的功能之一就是能夠正確存儲抓取的數據,這通常意味着生成帶有抓取數據的“導出文件”(通常稱為“導出提要”),以供其他系統使用。

Scrapy通過Feed導出提供了開箱即用的功能,它允許您使用多種序列化格式和存儲后端生成包含抓取的項目的Feed。

請參閱您的案例的csv部分

另一種更自定義的方法是使用scrapy的Item Pipelines 有簡單的JSON作家的例子在這里 ,可以很容易地修改輸出CSV或任何其他形式。

例如,這段代碼會將所有項目輸出到項目目錄中的test.csv文件:

import scrapy
class MySpider(scrapy.Spider):
    name = 'feed_exporter_test'
    # this is equivalent to what you would set in settings.py file
    custom_settings = {
        'FEED_FORMAT': 'csv',
        'FEED_URI': 'test.csv'
    }
    start_urls = ['http://stackoverflow.com/questions/tagged/scrapy']

    def parse(self, response):
        titles = response.xpath("//a[@class='question-hyperlink']/text()").extract()
        for i, title in enumerate(titles):
            yield {'index': i, 'title': title}

本示例生成50行長的csv文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM