Python使用Beautiful Soup提取href/data-ctorig链接失败问题排查
问题根源
不是页面脚本阻止爬取,是代码的元素定位逻辑有误:
- 你当前查找的是
class="wrapper"的div标签,href、data-ctorig这两个属性并不在div上,而是在div嵌套的<a>标签内,直接在div上调用get()取属性自然拿不到结果 - 注释里写的
soup.a会匹配页面全局第一个a标签,不是搜索结果区域的链接,所以返回的是站点根路径/,拿不到目标属性值
修正后可运行代码
import requests from bs4 import BeautifulSoup band = "it's my life bon jovi" url = f'https://www.letras.mus.br/?q={band}' # 添加基础请求头模拟普通浏览器访问,避免被基础反爬规则拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36" } res = requests.get(url, headers=headers) soup = BeautifulSoup(res.content, 'html.parser') # 直接匹配wrapper容器下带data-ctorig属性的第一个a标签,也就是第一条搜索结果链接 first_link = soup.select_one('div.wrapper a[data-ctorig]') if first_link: print("data-ctorig属性值:", first_link.get('data-ctorig')) print("href属性值:", first_link.get('href'))
补充说明
- 原代码存在重复导入requests的问题,已经在修正版里删除冗余导入
- 不需要用
find_all获取全量wrapper元素再循环遍历,用select_one可以直接拿到匹配规则的第一个目标元素,执行效率更高 - 爬取公开站点时建议带上常规UA头,requests默认的UA标识很容易被站点识别为爬虫,返回和浏览器访问不一致的页面内容

内容的提问来源于stack exchange,提问作者Lucas Tesch
相关产品推荐
相关产品推荐

