【问题标题】:Python Beautiful Soup parsing a UTF-8 coded table (using mechanize)Python Beautiful Soup 解析 UTF-8 编码表(使用 mechanize)
【发布时间】:2025-11-23 07:00:01
【问题描述】:

我正在尝试解析以 UTF-8 编码的下表(这是其中的一部分):

<table cellspacing="0" cellpadding="3" border="0" id="ctl00_SPWebPartManager1_g_c001c0d9_0cb8_4b0f_b75a_7cc3b6f7d790_ctl00_HistoryData1_gridHistoryData_DataGrid1" style="width:100%;border-collapse:collapse;">
                            <tr class="gridHeader" valign="top">
                                <td class="titleGridRegNoB" align="center" valign="top"><span dir=RTL>שווי שוק (אלפי ש"ח)</span></td><td class="titleGridReg" align="center" valign="top">הון רשום למסחר</td><td class="titleGridReg" align="center" valign="top">שער נמוך</td><td class="titleGridReg" align="center" valign="top">שער גבוה</td><td class="titleGridReg" align="center" valign="top">שער בסיס</td><td class="titleGridReg" align="center" valign="top">שער פתיחה</td><td class="titleGridReg" align="center" valign="top"><span dir="rtl">שער נעילה (באגורות)</span>    
</td><td class="titleGridReg" align="center" valign="top">שער נעילה מתואם</td><td class="titleGridReg" align="center" valign="top">תאריך</td>
                            </tr><tr onmouseover="this.style.backgroundColor='#FDF1D7'" onmouseout="this.style.backgroundColor='#ffffff'">

我的代码是:

html = br.response().read().decode('utf-8')
soup = BeautifulSoup(html)

table_id = "ctl00_SPWebPartManager1_g_c001c0d9_0cb8_4b0f_b75a_7cc3b6f7d790_ctl00_HistoryData1_gridHistoryData_DataGrid1"
table = soup.findall("table", id=table_id)

我收到以下错误:

TypeError: 'NoneType' object is not callable

【问题讨论】:

  • 嘿,你能显示完整的回溯吗?
  • 当前代码在:dpaste.de/w6cV
  • @alKid 很抱歉,您所说的完整追溯是什么意思?
  • 所有完整的回溯。或者..这是执行脚本时唯一弹出的内容吗?
  • @alKid 是的。有问题的行是table = soup.findall("table", id=table_id)。我根据@GamesBrainiac 将其更改为table = soup.find(id=table_id),现在它返回None

标签: python html parsing beautifulsoup mechanize-python


【解决方案1】:

由于您只是使用id 进行查找,因此您可以只使用id 而不会使用其他任何东西,因为ids 是独一无二的:

更新

使用您的粘贴:

# encoding=utf-8
from bs4 import BeautifulSoup
import requests

data = requests.get('https://dpaste.de/EWCK/raw/')
soup = BeautifulSoup(data.text)
print soup.find("table",
                id="ctl00_SPWebPartManager1_g_c001c0d9_0cb8_4b0f_b75a_7cc3b6f7d790_ctl00_HistoryData1_gridHistoryData_DataGrid1")

我正在使用 python 请求从网页获取数据,这与您尝试获取数据相同。上面的代码有效,并且给出了正确的 ID。试试这个,不要使用.decode('utf-8'),而是使用br.response().read()

【讨论】:

  • 谢谢,但现在它返回None
  • @erantdo 这很奇怪,它在我的电脑上运行良好,是因为你使用的是机盖吗?尝试使用普通 python 运行它。
  • @aIKid 怎么不行?
  • @erantdo 我想我知道问题出在哪里,当您将其编码为 ASCII 时,会发生很多斜杠。这会打乱 BeautifulSoup 的解析。
  • @GamesBrainiac 我不明白。我删除了.decode,它仍然返回None。如果您告诉我使用 requests,那么我对此有疑问 - 这就是我使用 mechanize 的原因