在 python 中使用 BeautifulSoup 分页

Pagination with BeautifulSoup in python

我正在为这个网站做一个网络抓取项目。 https://yellowpages.com.eg/en/search/fast-food 我设法抓取了数据,但我正在为分页而苦苦挣扎 因为我想制作一个循环来抓取下一页按钮,然后使用下一个按钮中抓取的 URL 来执行相同的过程。

url = 'https://yellowpages.com.eg/en/search/fast-food'
while True:
    r = requests.get(url)
    soup = BeautifulSoup(r.content, 'lxml')
    pages = soup.find_all('ul', class_='pagination center-pagination')
    for page in pages:
        nextpage = page.find('li', class_='waves-effect').find('a', {'aria-label': 'Next'})
        if nextpage:
            uu = nextpage.get('href')
            url = 'http://www.yellowpages.com.eg' + str(uu)
            print(url)
        else:
            break

此代码 returns 分页顺序中的下一个 URL 然后跳出循环。

问题在于

nextpage =page.find('li', class_='waves-effect').find('a', {'aria-label' : 'Next'})

return 下一页按钮,但前提是上一页按钮不存在,这意味着它会在您离开第一页后立即中断(它 returns None).

而是 page.find_all('li', class_='waves-effect') return 下一个和上一个按钮。

要(也许)稳健地获得“下一步”按钮,请将您的行更改为

nextpage =page.find_all('li', class_='waves-effect')[-1].find('a', {'aria-label' : 'Next'})