Python Scrapy 递归获取下一页

新手上路,请多包涵

题目描述

如下图,像这种页数显示不完整,没有下一页链接地址,应该如何获取下一页呢?

clipboard.png

相关代码

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,再把每一页的所有视频连接放进一个列表里,但是如果所有链接上百万,放进列表感觉不太好。

这种情况有什么好的方法可以实现获取下一页吗?

阅读 3.6k
1 个回答

获取最大的页码,然后for循环一个一个页码的爬。不需要一次全部构造好,需要URL的时候构造。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题