gpt4 book ai didi

python - 无法在 scrapy 中找出正确的循环

转载 作者:太空宇宙 更新时间:2023-11-03 12:09:22 26 4
gpt4 key购买 nike

我是新手。

这是我的蜘蛛:

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

该网站的每个页面都有一个姓名、电话和电子邮件列表。上面的代码将输出一个 csv 文件,其中每页包含三列和一行。在第一列中,每个单元格都是该页面中所有姓名的列表,在第二列中,它们是所有电话的列表,在第三列中,它们是所有电子邮件的列表。

我真正想做的是将每个姓名、电话和电子邮件放在单独的行中。我试图通过遍历每个项目来做到这一点,但它只打印名字,每页上的电话和电子邮件。 (是不是因为每次函数spider返回一个item时callback都会将爬虫移动到下一个URL)(是吗???)

你会怎么做?

这是项目:

from scrapy.item import Item, Field

class AmpaItem(Item):
nome = Field()
phone = Field()
email = Field()

最佳答案

根据您在 farmes 中使用的复数形式,我假设页面上有很多农民。所以你的表达式可能会返回一组农民。

你能遍历农民的结果并产出每一项吗?

#pseudocode
hxs = HtmlXPathSelector(response)
farmers = hxs.select('//div[@class="span-24 tx_left"]')
for farmer in farmer:
item = AmpaItem()
#be sure to select only one desired farmer here
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()
yield item

关于python - 无法在 scrapy 中找出正确的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12412091/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com