使用requests_html爬取Forbes最佳商业州榜单,无法获取表格内容怎么办?
解决Forbes最佳商业州榜单爬取问题
你的代码返回-1是因为错误地在页面纯文本中查找HTML元素ID字符串,#list-table-body是DOM元素的ID属性,不会以纯文本形式出现在页面文本里,自然找不到。正确做法是用requests_html的DOM选择器定位元素,而非操作原始文本。
修正后的代码示例
import requests_html # 初始化会话 session = requests_html.HTMLSession() # 添加请求头模拟浏览器(可选,降低反爬拦截概率) headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } # 请求目标页面 r = session.get("https://www.forbes.com/best-states-for-business/list/#tab:overall", headers=headers) # 渲染动态内容,sleep参数确保页面加载完成 r.html.render(sleep=2) # 定位表格主体元素(first=True取第一个匹配项) table_body = r.html.find('#list-table-body', first=True) if table_body: # 遍历表格的每一行 for row in table_body.find('tr'): # 提取每行的列文本并去除首尾空白 cols = [col.text.strip() for col in row.find('td')] if cols: # 跳过空行 print(cols) else: print("未找到目标表格元素")
关键说明
- 用
r.html.find()替代r.text.find():前者是针对DOM结构的选择器,能直接定位到指定ID的元素; - 增加
sleep参数:动态页面需要时间加载内容,sleep=2让浏览器渲染完成后再提取数据; - 可选请求头:模拟正常浏览器请求,避免被网站反爬机制拦截。
内容的提问来源于stack exchange,提问作者user2895444
相关产品推荐
相关产品推荐

