使用Python提取洛杉矶街头艺术网站壁画链接失败,请求调试帮助
问题分析与代码调试
问题原因
- 动态内容渲染:该网站采用JavaScript动态加载壁画列表内容,直接通过
get()请求获取的是未渲染的原始HTML,此时目标网格元素还未生成,所以你的选择器无法匹配到任何内容,返回空列表。 - 选择器冗余脆弱:原代码使用的嵌套class选择器过于冗长,一旦网站调整CSS类名,选择器就会失效,容错性差。
调试后的代码
from requests_html import HTMLSession import warnings warnings.filterwarnings("ignore", category=DeprecationWarning) s = HTMLSession() def get_mural_links(): url = 'https://streetartcities.com/cities/losangeles/artworks' links = [] r = s.get(url) # 等待JavaScript渲染页面,超时设置为10秒 r.html.render(timeout=10) # 简化选择器,直接定位包含壁画链接的a标签(通过其href特征) mural_items = r.html.find('a[href^="/artworks/"]') for item in mural_items: # 拼接域名得到完整可访问链接 full_link = f"https://streetartcities.com{item.attrs['href']}" links.append(full_link) return links print(get_mural_links())
关键修改点
- 添加
r.html.render(timeout=10):触发requests_html的无头浏览器渲染逻辑,等待页面JavaScript执行完毕,生成包含壁画列表的完整DOM结构。 - 优化选择器:使用
a[href^="/artworks/"]直接匹配所有壁画详情页的链接,相比嵌套class选择器,更不容易因网站样式调整而失效。 - 拼接完整URL:原页面返回的是相对路径,拼接域名后得到可直接访问的完整壁画链接。
内容的提问来源于stack exchange,提问作者Jessie H
相关产品推荐
相关产品推荐

