Python 如何在scrapy中重现?

Python 如何在scrapy中重现?,python,scrapy,Python,Scrapy,这是我的密码 import scrapy class PvSpider(scrapy.Spider): name = 'pv' allowed_domains = ['www.piaov.com'] start_urls = ['http://www.piaov.com/'] def start_requests(self): yield scrapy.Request(url='http://www.piaov.com/list/7.html')

这是我的密码

import scrapy
class PvSpider(scrapy.Spider):
   name = 'pv'
   allowed_domains = ['www.piaov.com']
   start_urls = ['http://www.piaov.com/']

   def start_requests(self):
       yield scrapy.Request(url='http://www.piaov.com/list/7.html')

   def parse(self, response):
       names = response.xpath("//ul[@class='mlist']//li/a/@title").extract()
       on = response.meta.get("names", [])
       cmp_names = on + names
       for p in range(2, 7):
           yield scrapy.Request(url='http://www.piaov.com/list/7_{}.html'.format(p),
                                meta={"names": cmp_names},
                                callback=self.parse)

       yield scrapy.Request("http://www.piaov.com", meta={"names": cmp_names}, callback=self.parse_item)

   def parse_item(self, response):
       pass
当我在“parse_item”函数中调试代码时,“response.meta[“names”]”只包含第一页数据(本例中为12个标题),我如何才能获得6页数据列表。

这是因为您有URL,而scrapy忽略重复的URL,除非在
请求中指定了
dont_filter=True
(url\u此处,don\u filter=True)

另外,我不喜欢你的scraper逻辑,为什么你要调用
parse\u item
?这是不必要的。请查看下面的代码,然后这样做

import scrapy
class PvSpider(scrapy.Spider):
   name = 'pv'
   allowed_domains = ['www.piaov.com']
   start_urls = ['http://www.piaov.com/']

   def start_requests(self):
       yield scrapy.Request(url='http://www.piaov.com/list/7.html')

   def parse(self, response):
       for name in response.xpath("//ul[@class='mlist']//li/a/@title").extract():

            yield {"name": name}

       for p in range(2, 7):
           yield scrapy.Request(url='http://www.piaov.com/list/7_{}.html'.format(p),
                                callback=self.parse)

调用parse_item,因为这是我真实项目的演示。在我真实的项目中,我需要在“parse_item”函数中解析某些内容。我需要在项目的第一个部分解析内容,然后我需要解析实际返回JSON数据的注释(本例中为标题),最后一步是爬网客户端的'like',它也返回JSON数据,所以我有上面的逻辑。因为我正在测试'meta'数据。@ZeeBmChan如果你真的想调用
parse_item
的话,可以调用它like
yield self.parse_item(cmp_名称)
然后在其中处理名称。无需生成对同一URL的请求
http://www.piaov.com
一次又一次。但如果您仍要发出请求,请指定
dont\u filter=True
以便scrapy不会忽略重复的请求