使用requests无法解析网站全部下一页链接,求非Selenium解决方法
解决无法获取第10页之后分页链接的问题
首先,你的脚本当前是通过查找title属性等于当前页码的<a>标签来获取下一页,但很多网站在分页到一定页数后,不会再显示所有数字页码,而是只保留当前页附近的几个页码,同时提供“下一页”按钮(对应西班牙语网站可能是“Siguiente”)。这就是为什么到第10页后找不到对应title的链接了。
不用Selenium的话,我们可以调整分页链接的定位方式,直接定位“下一页”按钮,而不是依赖数字页码的title属性。具体步骤如下:
1. 分析目标网站的分页结构
访问第10页后,查看页面的分页区域HTML,你会发现下一页链接通常会有明显的标识:
- 可能带有特定的
class(比如next-page) title属性可能是西班牙语的“下一页”(比如Siguiente página)- 链接文本可能是
>或者Siguiente
2. 修改脚本的分页定位逻辑
替换原来通过title='{p}'查找链接的代码,改为定位“下一页”按钮。这里我们假设下一页链接的文本是Siguiente,可以用BeautifulSoup的find方法匹配文本:
import requests from bs4 import BeautifulSoup from urllib.parse import urljoin import time # 可选,添加延时避免被反爬 base = 'https://www.icab.es' link = 'https://www.icab.es/?go=eaf9d1a0ec5f1dc58757ad6cffdacedb1a58854a600312cc82c494d2c55856f1e25c06b4b6fcee5ddabebfe2d30057589a86e9750b459e9d60598cc6e5c52a4697030b2b8921f29f' with requests.Session() as s: s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36' while True: r = s.get(link) soup = BeautifulSoup(r.text,"lxml") # 这里处理你需要抓取的数据 # ... # 定位下一页链接:查找文本包含"Siguiente"的a标签 next_page = soup.find("a", string=lambda text: text and "Siguiente" in text.strip()) if next_page: link = urljoin(base, next_page.get("href")) print("next page:", link) time.sleep(1) # 可选,添加1秒延时,避免请求过于频繁被拦截 else: print("已到达最后一页") break
3. 备选方案:检查URL参数构造分页链接
如果网站的分页是通过URL参数控制的(比如&page=11),你也可以尝试解析当前URL的参数,手动递增页码来构造下一页链接。不过这种方式需要确认网站的分页参数规则,你可以查看第1、2页的URL变化,找到页码对应的参数,然后循环递增该参数值即可。
比如,如果URL里的go参数包含分页信息,你可以尝试解码这个参数,或者观察页码变化时go参数的规律,不过这种方式相对复杂,优先推荐第一种定位“下一页”按钮的方法。
内容的提问来源于stack exchange,提问作者robots.txt
相关产品推荐
相关产品推荐

