2

各リストから会社名と住所を抽出して-csvにエクスポートしようとしていますが、出力csvに問題があります。bizs = hxs.select( "// div [@ class ='listing_content']")が問題を引き起こしている可能性があると思います。

yp_spider.py

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from yp.items import Biz

class MySpider(BaseSpider):
    name = "ypages"
    allowed_domains = ["yellowpages.com"]
    start_urls = ["http://www.yellowpages.com/sanfrancisco/restaraunts"]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        bizs = hxs.select("//div[@class='listing_content']")
        items = []

        for biz in bizs:
            item = Biz()
            item['name'] = biz.select("//h3/a/text()").extract()
            item['address'] = biz.select("//span[@class='street-address']/text()").extract()
            print item
            items.append(item)

items.py

# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/topics/items.html

from scrapy.item import Item, Field

class Biz(Item):
    name = Field()
    address = Field()

    def __str__(self):
        return "Website: name=%s address=%s" %  (self.get('name'), self.get('address'))

「scrapycrawlypages-o list.csv -t csv」からの出力は、会社名と場所の長いリストであり、同じデータを数回繰り返します。

4

1 に答える 1

5

「。」を1つ追加する必要があります。相対xpathを選択します。これは、scrapyドキュメント(http://doc.scrapy.org/en/0.16/topics/selectors.html)からのものです。

最初は、次のアプローチを使用したくなるかもしれませんが、実際にはすべてを抽出するため、これは間違っています。

要素内の要素だけでなく、ドキュメントの要素:

>>> for p in divs.select('//p') # this is wrong - gets all <p> from the whole document
>>>     print p.extract()

これはそれを行うための適切な方法です(.// p XPathの前にドットが付いていることに注意してください):

>>> for p in divs.select('.//p') # extracts all <p> inside
>>>     print p.extract()
于 2013-01-18T05:09:33.453 に答える