Scrapy CSV 导出在所有行中显示相同的数据
Scrapy CSV export shows the same data in all rows
我正在尝试抓取以下 html 代码:
<ul class="results-list" id="search-results">
<li>
<h3 class="name">First John</h3>
<div class="details">
<a href="mailto:example@mail.com" class="email">email</a>
<span class="phone">999999999</span>
</div>
</li>
<li>
<h3 class="name">Second John</h3>
<div class="details">
<a href="mailto:example@mail.com" class="email">email</a>
<span class="phone">999999999</span>
</div>
</li>
</ul>
当我 运行 我的蜘蛛时,我得到 2 行,包含相同的信息。我有 name,email,phone 列,例如在两者的 name 列中我会得到:
第一约翰,第二约翰。
我的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
我在所有行中得到相同的信息。
您在 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
我正在尝试抓取以下 html 代码:
<ul class="results-list" id="search-results">
<li>
<h3 class="name">First John</h3>
<div class="details">
<a href="mailto:example@mail.com" class="email">email</a>
<span class="phone">999999999</span>
</div>
</li>
<li>
<h3 class="name">Second John</h3>
<div class="details">
<a href="mailto:example@mail.com" class="email">email</a>
<span class="phone">999999999</span>
</div>
</li>
</ul>
当我 运行 我的蜘蛛时,我得到 2 行,包含相同的信息。我有 name,email,phone 列,例如在两者的 name 列中我会得到: 第一约翰,第二约翰。
我的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
我在所有行中得到相同的信息。
您在 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