2014-02-02 3 views
0

Я следил за учебником на странице scrapy, и я попытался просто отредактировать код для практики в википедии. Когда я это делаю, он выводит текст на странице, но он делает это сотни раз. Файл JSON, а также консоль содержат одно и то же произведение, напечатанное снова и снова. Я думаю, что это может быть связано с функцией? Кроме того, в чем разница между sel.xpath и site.xpath?Scrapy выдает то же самое сотни раз

Спасибо!

Вот код:

from scrapy.spider import Spider 
from scrapy.selector import Selector 

from tutorial.items import DmozItem 

class DmozSpider(Spider): 
    name = "dmoz" 
    allowed_domains = ["wikipedia.com"] 
    start_urls = [ 
     "http://en.wikipedia.org/wiki/Caesar_Hull" 
    ] 

    def parse(self, response): 
     sel = Selector(response) 
     sites = sel.xpath('//div') 
     items =[] 
     for site in sites: 
      item = DmozItem() 
      item['title'] = sel.xpath('.//p/text()').extract() 
      items.append(item) 
     return items 

ответ

1

если вы хотите второй XPath быть по отношению к первому, вместо:

item['title'] = sel.xpath('.//p/text()').extract() 

сделать:

item['title'] = site.xpath('.//p/text()').extract() 

зацикливание на //div создайте столько div, сколько они нашли в документе, конечно.

работает sel.xpath('.//p/text()') так же, как работает sel.xpath('//p/text()'), следовательно, продолжают получать тот же результат снова и снова

+0

Я вижу, спасибо, вы видите, почему код будет печатать то же самое, много раз? – user3261706

+0

обновлено, дайте мне знать, если это имеет смысл –

+0

Думаю, я понимаю, о чем вы говорите, но я не уверен. Прости, что я новичок в этом. Я изменил // div на .//p, но он все равно дает мне повторные результаты. Можете ли вы указать, какая часть кода должна быть изменена? – user3261706

Смежные вопросы