如何获取爬虫实际访问的网页地址?现有代码修改咨询
解决爬虫跳转后识别实际访问地址的问题
嘿,这个场景太常见了!你现在的代码直接读取了响应内容,但没保留urlopen返回的响应对象——而这个对象恰恰能帮你拿到实际跳转后的地址。
核心修改点
urlopen()返回的响应对象有个geturl()方法,它会返回最终实际访问的URL(不管经历了多少次HTTP重定向)。你只需要先把响应对象存下来,再调用这个方法就行。
修改后的完整代码示例
from urllib.request import Request, urlopen from bs4 import BeautifulSoup # 假设l是你的目标链接 target_url = "https://example.com/your-target-link" req = Request(target_url, headers={'User-Agent': 'Mozilla/5.0'}) # 先保存响应对象,不要直接read() response = urlopen(req) # 获取实际跳转后的地址 actual_url = response.geturl() # 对比目标地址和实际地址,判断是否发生跳转 if actual_url != target_url: print(f"⚠️ 页面发生跳转!原目标地址:{target_url},实际访问地址:{actual_url}") # 再读取页面内容进行后续解析 html_page = response.read() soup = BeautifulSoup(html_page, "html.parser") # 记得指定解析器,避免警告
额外说明
- 这个方法能处理HTTP 301/302这类常见的重定向,
urlopen会自动跟随重定向,geturl()直接给你最终的终点地址。 - 如果需要查看重定向的详细信息(比如跳转次数、响应头里的Location字段),可以用
response.info()来获取响应头内容,但大部分场景下geturl()就足够满足你的需求了。
内容的提问来源于stack exchange,提问作者MathiasRa
相关产品推荐
相关产品推荐

