2017-06-13 23 views
0

我想刮下面的html代碼:Scrapy導出CSV文件顯示在所有行相同的數據

<ul class="results-list" id="search-results"> 
<li> 
<h3 class="name">First John</h3> 
<div class="details"> 
<a href="mailto:[email protected]" class="email">email</a> 
&nbsp; 
<span class="phone">999999999</span> 
</div> 
</li> 
<li> 
<h3 class="name">Second John</h3> 
<div class="details"> 
<a href="mailto:[email protected]" class="email">email</a> 
&nbsp; 
<span class="phone">999999999</span> 
</div> 
</li> 
</ul> 

當我跑我的蜘蛛,我得到2行,包含相同的信息。我有名字,電子郵件,電話列,例如在名字欄中我會得到: 第一約翰,第二約翰。

我的Scrapy代碼如下:

people= response.xpath('//ul[@class="results-list"]/li') 
     for person in people: 
      item = SpiderItem() 
      item['Name'] = person.xpath(
       '//h3/text()').extract() 
      item['Email'] = person.xpath(
       '//div[@class="details"]/a/@href').extract() 
      item['Phone'] = person.xpath(
       '//div[@class="details"]/span[@class="phone"]/text()').extract() 
      yield item 

然而,當我運行scrapy crawl MySpider -o output.csv我得到的所有行相同的信息。

回答

1

您使用的是XPath表達式的絕對路徑,將其改爲:

for person in people: 
    item = SpiderItem() 
    item['Name'] = person.xpath(
     './/h3/text()').extract_first() 
    item['Email'] = person.xpath(
     './/div[@class="details"]/a/@href').extract_first() 
    item['Phone'] = person.xpath(
     './/div[@class="details"]/span[@class="phone"]/text()').extract_first() 
    yield item 
+0

非常感謝。現在就像魅力一樣。 – GRS