【发布时间】:2017-07-11 23:41:08
【问题描述】:
我正在使用下面的代码来爬取页面上的多个链接,并从每个相应的链接中获取数据列表:
import scrapy
class testSpider(scrapy.Spider):
name = "quotes"
start_urls = ['http://www.website.com']
def parse(self, response):
urls = response.css('div.subject_wrapper > a::attr(href)').extract()
for url in urls:
url = response.urljoin(url)
yield scrapy.Request(url=url, callback=self.getData)
def getData(self, response):
data = {'data': response.css('strong.data::text').extract()}
yield data
它工作正常,但由于它为每个链接返回一个数据列表,当我输出到 CSV 时,它看起来如下所示:
"dalegribel,Chad,Ninoovcov,dalegribel,Gotenks,sillydog22"
"kaylachic,jmargerum,kaylachic"
"Kempodancer,doctordbrew,Gotenks,dalegribel"
"Gotenks,dalegribel,jmargerum"
...
是否有任何简单/有效的方法将数据输出为单个行列表而没有任何重复(相同的数据可以出现在多个页面上),类似于以下?
dalegribel
Chad
Ninoovcov
Gotenks
...
我尝试使用数组然后循环遍历每个元素以获取输出,但收到错误消息,提示 yield 仅支持“Request、BaseItem、dict 或 None”。此外,由于我将在大约 10k 个条目上运行它,我不确定将数据存储在数组中是否会大大减慢抓取速度。谢谢。
【问题讨论】:
标签: python scrapy scrapy-spider