You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用BeautifulSoup提取href中的链接 解决返回空列表问题

问题原因及修复方案

核心问题

  • 代码中定义的请求头headers没有传入requests.get()方法,请求默认携带Python requests的官方UA标识,被Redfin的反爬机制直接拦截,返回的并非正常的房源列表页面源码,因此无法匹配到类名为bottomV2的div元素,最终得到空列表。
  • Redfin反爬规则较严格,仅传UA可能仍会被拦截,可补充其他常规请求头提升通过率;如果静态请求仍拿不到对应元素,说明房源数据是前端JS动态渲染生成,静态爬取无法获取,需要改用无头浏览器方案(如Selenium、Playwright)。

修正后代码

import requests
from bs4 import BeautifulSoup
headers ={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
    'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
    'Referer': 'https://www.redfin.com/'
}
# 传入headers参数发起请求
r = requests.get('https://www.redfin.com/city/5357/WA/Edmonds', headers=headers)
# 先验证请求状态码是否为200,避免被拦截返回错误页面
print(f"请求状态码:{r.status_code}")
# 解析器替换为lxml,容错率更高,需提前安装:pip install lxml
soup = BeautifulSoup(r.content, 'lxml')
tra = soup.find_all('div', class_='bottomV2')
print(f"匹配到的bottomV2节点数量:{len(tra)}")
for links in tra:
    for link in links.find_all('a', href=True):
        comp = link['href']
        print(comp)

额外排查提示

如果修正后还是匹配不到节点,直接打印r.text查看返回的源码内容,确认是否出现反爬验证提示、是否存在你要找的bottomV2类元素:

  • 如果源码里没有对应元素,说明数据是动态加载的,必须使用模拟浏览器的方式爬取
  • 如果返回的是验证页面,需要补充cookie、使用代理IP绕过反爬

内容的提问来源于stack exchange,提问作者GX Mentor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:45:09