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

网页抓取Citibike数据时无法获取<tr>标签内容求助

解决Citibike骑行数据抓取中标签无法获取的问题

问题描述

尝试用Python抓取Citibike骑行数据文件时,能成功定位到id="tbody-content"的<tbody>标签,但调用.find_all('tr')返回空列表,无法获取<td>内<a>标签的链接和文本。代码如下:

url = 'https://s3.amazonaws.com/tripdata/index.html'
html_source = requests.get(url).text 
soup = BeautifulSoup(html_source, "html.parser")
soup.prettify() 

# 仅获取tbody标签能成功,但添加.find_all('tr')后返回空
citibikedata = soup.find('tbody', id = "tbody-content").find_all('tr') 
print(citibikedata)

问题原因

requests获取的是页面的静态HTML源码,而目标页面中#tbody-content内的<tr>标签是通过JavaScript动态渲染生成的,静态源码中不存在这些标签,因此BeautifulSoup无法解析到。

解决方案

方案一:用Selenium模拟浏览器加载动态页面

通过模拟浏览器运行JavaScript,获取完全加载后的页面内容:

from selenium import webdriver
from bs4 import BeautifulSoup
import time

url = 'https://s3.amazonaws.com/tripdata/index.html'

# 初始化Chrome浏览器(需提前安装对应版本的chromedriver)
driver = webdriver.Chrome()
driver.get(url)
# 等待页面动态内容加载完成
time.sleep(2)

# 获取加载后的完整页面源码
html_source = driver.page_source
soup = BeautifulSoup(html_source, "html.parser")

# 正常提取<tr>标签
citibikedata = soup.find('tbody', id="tbody-content").find_all('tr')

# 遍历提取每个文件的链接和名称
for tr in citibikedata:
    a_tag = tr.find('td').find('a')
    if a_tag:
        file_link = a_tag['href']
        file_name = a_tag.get_text(strip=True)
        print(f"文件名称:{file_name}\n下载链接:{file_link}\n")

# 关闭浏览器
driver.quit()

方案二:直接访问S3存储桶获取文件列表(更高效)

Citibike的骑行数据直接存储在AWS S3的tripdata存储桶中,可直接请求存储桶的文件列表页面,无需依赖动态渲染:

import requests
from bs4 import BeautifulSoup

# 直接访问S3存储桶的文件列表地址
url = 'https://s3.amazonaws.com/tripdata/'
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

# 提取所有数据文件的链接和名称
for link in soup.find_all('a'):
    file_href = link['href']
    # 过滤出骑行数据文件(csv/zip格式)
    if file_href.endswith(('.csv', '.zip')):
        full_link = f"https://s3.amazonaws.com/tripdata/{file_href}"
        print(f"文件名称:{file_href}\n下载链接:{full_link}\n")

方案二无需等待页面加载,执行效率更高,推荐优先使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:07:25