题目描述
如下图,像这种页数显示不完整,没有下一页链接地址,应该如何获取下一页呢?
相关代码
start_urls = ['https://www.bilibili.com/v/kichiku/course']
def start_requests(self):
for url in self.start_urls:
yield SplashRequest(url, self.parse_list, args={'wait': '0.5'})
def parse_list(self, response):
# 获取视频地址和下一页地址
site = Selector(response)
# 视频地址
url_li = site.xpath('//*[@id="videolist_box"]/div[2]/ul/li/div/div[2]/a/@href').extract()
for v_url in url_li:
r_url = 'https:' + v_url
yield Request(r_url, callback=self.parse_product)
# 下一页
next_list = site.xpath('//*[@id="videolist_box"]/div[2]/div[2]/ul/li[@class="page-item next"]').extract()
print next_list
if next_list:
# i += 1
url = "https://www.bilibili.com/v/ad/ad/#/all/default/0/{}".format(#i)
Request(url)
yield Request(url, callback=self.parse_list)
我想过给parse_list传递一个i参数,这样就可以判断有下一页这个标签,就 +1 ,但parse_list好像不能这样传递参数;也想过先获取最大页数,然后构造成每一页的URL,再把每一页的所有视频连接放进一个列表里,但是如果所有链接上百万,放进列表感觉不太好。
这种情况有什么好的方法可以实现获取下一页吗?
获取最大的页码,然后for循环一个一个页码的爬。不需要一次全部构造好,需要URL的时候构造。