私はウェブサイトのリンクから特定の情報を得る基本的なスパイダーを使用しています。私のコードは次のようになります:スパイダースパイダーのアイテムをリストに追加するには?
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
Q:私はすべての項目を追加するにはどうすればよいことスクレイパーはリストobjectListを見つけますか?
EDIT:
私は、このような結果保存することができますので、私は、リストに結果を保存したい:で説明したように、あなたがscrapyのフィード輸出機能を使用する必要があり、結果を保存するには
import pandas as pd
table = pd.DataFrame(objectList)
writer = pd.ExcelWriter('DataAll.xlsx')
table.to_excel(writer, 'sheet 1')
writer.save()
あなたは最初にこれをやりたいのですか? – Granitosaurus
うん@Granitosaurus done – titusAdam