私は初心者です。
これは私のスパイダーです:
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from ampa.items import AmpaItem
class AmpaSpider(CrawlSpider):
name = "ampa"
allowed_domains = ['website']
start_urls = ['website/page']
rules = (Rule(SgmlLinkExtractor(allow=('associados?', ), deny=('associado/', )), callback='parse_page', follow=True),)
def parse_page(self, response):
hxs = HtmlXPathSelector(response)
item = AmpaItem()
farmers = hxs.select('//div[@class="span-24 tx_left"]')
item['nome'] = farmers.select('//div/h3[@class="titulo"]/a/text()').extract()
item['phone'] = farmers.select('//div/span[@class="chamada"]/a[contains(text(), "Telefone")]/text()').extract()
item['email'] = farmers.select('//div/span[@class="chamada"]/a[contains(text(), "E-mail")]/text()').extract()
print item.values()
return item
これは私のパイプラインです:
class CsvWriterPipeline(object):
def __init__(self):
self.csvwriter = csv.writer(open('items.csv', 'wb'))
def process_item(self, item, ampa):
self.csvwriter.writerow([item['nome'], item['phone'], item['email']])
return item
ウェブサイトの各ページには、名前、電話番号、電子メールのリストがあります。上記のコードは、各ページに 3 つの列と 1 つの行を含む csv ファイルを出力します。最初の列の各セルは、そのページ内のすべての名前のリスト、2 番目の列はすべての電話のリスト、3 番目の列はすべての電子メールのリストです。
私が本当にやりたいことは、それぞれの名前、電話番号、電子メールを個別の行に入れることです。各項目をループして実行しようとしましたが、各ページに名前、電話番号、電子メールしか印刷されません。(関数スパイダーがアイテムを返すたびに、コールバックがクローラーを次の URL に移動させるためでしょうか) (そうですか?)
それについてどう思いますか?
ここにアイテムがあります:
from scrapy.item import Item, Field
class AmpaItem(Item):
nome = Field()
phone = Field()
email = Field()