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
的话,可以调用它likeyield self.parse_item(cmp_名称)
然后在其中处理名称。无需生成对同一URL的请求http://www.piaov.com
一次又一次。但如果您仍要发出请求,请指定dont\u filter=True
以便scrapy不会忽略重复的请求