我用scrapy在csv文件中保存web scrawing的输出。爬行本身似乎工作正常,但我对csv文件中保存的输出格式不满意。我抓取了20个网页,每个网页包含100个职位名称和他们各自的网址。所以我期望输出如下:
url1, title1
url2, title2
...
...
url1999, title1999
url2000, title2000
但是,csv中的实际输出如下所示:
^{pr2}$我的蜘蛛代码是:
import scrapy
class TextPostItem(scrapy.Item):
title = scrapy.Field()
link = scrapy.Field()
class MySpider(scrapy.Spider):
name = "craig_spider"
allowed_domains = ["craigslist.org"]
start_urls = ["http://sfbay.craigslist.org/search/npo"]
def parse(self, response):
number = 0
for page in range(0, 20):
yield scrapy.Request("http://sfbay.craigslist.org/search/npo?=%s" % number, callback=self.parse_item, dont_filter=True)
number += 100
def parse_item(self, response):
item = TextPostItem()
item['title'] =response.xpath("//span[@class='pl']/a/text()").extract()
item['link'] = response.xpath("//span[@class='pl']/a/@href").extract()
return item
我的csv代码是:
scrapy crawl craig_spider -o craig.csv -t csv
有什么建议吗?谢谢。在
问题是您得到一个带有多个
//span[@class='pl']/a/
字段的响应,将每个text()
加载到一个列表中,并将其分配给item['title']
,然后将每个@href
加载到一个列表中并将其分配给item['link']
。在换句话说,对于第一个响应,您基本上是在执行以下操作:
所以,它被发送到CSV:
^{pr2}$若要解决此问题,请遍历每个
//span[@class='pl']/a/
,并为每个项目设置单独的项。在相关问题 更多 >
编程相关推荐