我正在尝试抓取这个网站的https://phdessay.com/free-essays/。
我需要找到最大页数,以便可以将带有页码的URL附加到start_urls列表中。我想不出该怎么做。
到目前为止,我的代码如下:
class PhdessaysSpider(scrapy.Spider):
name = 'phdessays'
start_urls = ['https://phdessay.com/free-essays/']
def parse(self, response):
all_essay_urls = response.css('.phdessay-card-read::attr(href)').getall()
for essay_url in all_essay_urls:
yield scrapy.Request(essay_url, callback=self.parse_essay_contents)
def parse_essay_contents(self, response):
items = PhdEssaysItem()
essay_title = response.css('.site-title::text').get()
essay_url = response.request.url
items['essay_title'] = essay_title
items['essay_url'] = essay_url
yield items在上面的代码中,我跟踪每篇文章到它的单独页面,并抓取URL和标题(我将抓取内容,这就是为什么我遵循个人文章URL的原因)。
这对于起始页来说工作得很好;但是大约有1677页可能会在未来发生变化。我想刮这个maximum_no_of_pages号码,然后附加所有链接与所有页码。
发布于 2019-09-17 15:10:26
您可以做的是找到最后一个页码,然后执行范围循环以生成next pages请求。
如下所示:
class PhdessaysSpider(scrapy.Spider):
name = 'phdessays'
start_urls = ['https://phdessay.com/free-essays/']
def parse(self, response):
max_page = int(response.css('.page-numbers::text').getall()[-1])
for page_number in range(1, max_page + 1):
page_url = f'https://phdessay.com/free-essays/page/{page_number}/'
yield scrapy.Request(page_url, callback=self.parse_page)
def parse_page(self, response):
all_essay_urls = response.css('.phdessay-card-read::attr(href)').getall()
for essay_url in all_essay_urls:
yield scrapy.Request(essay_url, callback=self.parse_essay_contents)
def parse_essay_contents(self, response):
items = PhdEssaysItem()
essay_title = response.css('.site-title::text').get()
essay_url = response.request.url
items['essay_title'] = essay_title
items['essay_url'] = essay_url
yield itemshttps://stackoverflow.com/questions/57968908
复制相似问题