如何在没有请求的情况下在Scrapy中屈服



我正试图用Scrapy 2.4抓取一个已定义的URL列表,其中每个URL最多可以有5个我想要遵循的分页URL。

现在系统也工作了,我确实有一个额外的请求,我想摆脱:

这些页面完全相同,但有不同的URL:

example.html
example.thml?pn=1

在我的代码中的某个地方,我做了这个额外的请求,但我不知道如何超按它。

这是工作代码:

定义一堆要抓取的URL:

start_urls = [
'https://example...',
'https://example2...',
]

开始请求所有启动URL;

def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(
url = url,
callback=self.parse,
)

解析起始URL:

def parse(self, response):
url = response.url  + '&pn='+str(1)
yield scrapy.Request(url, self.parse_item, cb_kwargs=dict(pn=1, base_url=response.url))

从起始URL获取所有分页的URL;

def parse_item(self, response, pn, base_url):
self.logger.info('Parsing %s', response.url)        
if pn < 6: # maximum level 5
url = base_url + '&pn='+str(pn+1)
yield scrapy.Request(url, self.parse_item, cb_kwargs=dict(base_url=base_url,pn=pn+1))

如果我理解你的问题是正确的,你只需要更改以开始?pn=1并忽略没有pn=null的那个,这里有一个选项,我将如何做到这一点,它也只需要一个解析方法。

start_urls = [
'https://example...',
'https://example2...',
]
def start_requests(self):
for url in self.start_urls:
#how many pages to crawl
for i in range(1,6):
yield scrapy.Request(
url=url + f'&pn={str(i)}'
)
def parse(self, response):
self.logger.info('Parsing %s', response.url) 

最新更新