![](/img/trans.png)
[英]How to compare each Scrapy spider item with another Scrapy spider items?
[英]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.