Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scrapy数百次输出相同的东西_Python_Scrapy - Fatal编程技术网

Python Scrapy数百次输出相同的东西

Python Scrapy数百次输出相同的东西,python,scrapy,Python,Scrapy,我遵循了scrapy页面上的教程,并尝试编辑代码在wikipedia上进行练习。当我这样做时,它会输出页面中的文本,但它会这样做数百次。JSON文件和控制台包含反复打印的相同内容。我想这可能与功能有关?另外,sel.xpath和site.xpath之间有什么区别 谢谢 代码如下: from scrapy.spider import Spider from scrapy.selector import Selector from tutorial.items import DmozItem c

我遵循了scrapy页面上的教程,并尝试编辑代码在wikipedia上进行练习。当我这样做时,它会输出页面中的文本,但它会这样做数百次。JSON文件和控制台包含反复打印的相同内容。我想这可能与功能有关?另外,sel.xpath和site.xpath之间有什么区别

谢谢

代码如下:

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

如果希望第二个xpath相对于第一个xpath,而不是:

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

当然,在
//div
上循环创建尽可能多的div


运行
sel.xpath('.//p/text()')
与运行
sel.xpath('//p/text()')
是一样的,因此一次又一次地得到相同的结果

我明白了,谢谢,你明白为什么代码会多次打印相同的东西吗?我想我明白你的意思,但我不确定。对不起,我是新来的。我将//div更改为//p,但它仍然会重复显示结果。你能指出代码的哪一部分需要更改吗?请试着给出一个重复的例子。当我将它输出到JSON的txt文件时,我现在在文档中打印了25或30次相同的文本。我想我可能看到了发生了什么,但我不确定,循环每次添加一个新条目时都会重复前面的所有条目,因此到最后整个过程会重复很多次。您知道如何解决此问题,使每个项目只打印一次吗?
item['title'] = site.xpath('.//p/text()').extract()