Pandas read_html 返回原始 HTML 内容 [对于某些行/单元格/等]

Posted

技术标签:

【中文标题】Pandas read_html 返回原始 HTML 内容 [对于某些行/单元格/等]【英文标题】:Pandas read_html to return raw HTML contents [for certain rows/cells/etc.] 【发布时间】:2016-03-18 03:40:45 【问题描述】:

很简单的问题,但我猜答案是“否”:

我有一个 html 表格,我正在使用 pandas.read_html 阅读它。但是某些单元格(列)中包含图像、列表或其他格式,显然 read_html 会丢弃。我显然不希望 pandas 解析其中的任何内容,但是有没有办法让它返回原始 HTML,比如 DataFrame 单元格中的一个字符串,以便我自己解析它?

示例:

<table>
    <th>Column 1</th> 
    <th>Column 2</th>
    <tr>
        <td>Cell1</td> 
        <td>Cell2 <img src="http://www.link.com/image.jpg /></td>
    </tr>
    <tr>
        <td>Cell3</td> 
        <td>Cell4 <img src="http://www.website.com/picture.gif /></td>
    </tr>          
</table>

如果 Pandas 要解析这个,我可能会从 column2 中获取“Cell2”和“Cell4”。我想做的是以某种方式获取单元格的全部内容,包括&lt;img&gt; 标记的[原始?] HTML 内容。然后我可以自己解析它们。

【问题讨论】:

显式示例会很棒,最好是简化示例。 猜我不知道为什么不清楚,但我添加了一个示例。谢谢! 嗯,很好的例子。在我看来绝对像一个错误。 (事实证明,您很清楚,总是最好举一个 IMO 的例子。) 熊猫有类似innerHTML的东西吗? 很高兴知道人们被激励从问题中删除我的“谢谢”,并提供其他无意义的编辑,但实际上并未回答。哦,好吧。 【参考方案1】:

pd.read_html 函数没有任何选项可以满足您的需求。因此,当我尝试从加州国务院网站获取企业名称列表时,除了 Pandas 自动解析 HTML 时的名称之外,我得到了所有内容:

>>> bizname = 'poss'
>>> url = f'https://businesssearch.sos.ca.gov/CBS/SearchResults?filing=&SearchType=CORP&SearchCriteria=bizname&SearchSubType=Begins'
>>> df = pd.read_html(url)[0]
>>> df
  Entity Number Registration Date         Status                                        Entity Name Jurisdiction      Agent for Service of Process
0      C2645412        04/02/2004         ACTIVE  View details for entity number 02645412  POSSU...      GEORGIA   ERESIDENTAGENT, INC. (C2702827)
1      C0786330        09/22/1976      DISSOLVED  View details for entity number 00786330  POSSU...   CALIFORNIA                        I. HALPERN
2      C2334141        03/01/2001  FTB SUSPENDED  View details for entity number 02334141  POSSU...   CALIFORNIA                   CLAIR G BURRILL
3      C0658630        11/08/1972  FTB SUSPENDED  View details for entity number 00658630  POSSU...   CALIFORNIA                               NaN
4      C1713121        09/23/1992  FTB SUSPENDED  View details for entity number 01713121  POSSU...   CALIFORNIA                LAWRENCE J. TURNER
5      C1207820        08/05/1983      DISSOLVED  View details for entity number 01207820  POSSU...   CALIFORNIA                          R L CARL
6      C3921531        06/27/2016         ACTIVE  View details for entity number 03921531  POSSU...   CALIFORNIA  REGISTERED AGENTS INC (C3365816)

该网站将企业名称隐藏在按钮后面。 但您可以使用requests 下载原始html。 然后,您可以使用 bs4 提取原始 HTML 表格以及您想要的任何特定行 (&lt;tr&gt;) 或单元格 (&lt;td&gt;)。

>>> soup = bs4.BeautifulSoup(requests.get(url).text)
>>> table = soup.find('table').findAll('tr')
>>> names = []
... for row in table:
...     names.append(getattr(row.find('button'), 'contents', [''])[0].strip())
>>> names
['',
 'POSSUM FILMS, INC',
 'POSSUM INC.',
 'POSSUM MEDIA, INC.',
 'POSSUM POINT PRODUCTIONS, INC.',
 'POSSUM PRODUCTIONS, INC.',
 'POSSUM-BILITY EXPRESS, INCORPORATED',
]
>>> df['Entity Name'] = names[1:]
>>> df['Entity Name'] = names[1:]
>>> df
  Entity Number Registration Date         Status                          Entity Name Jurisdiction      Agent for Service of Process
0      C2645412        04/02/2004         ACTIVE                    POSSUM FILMS, INC      GEORGIA   ERESIDENTAGENT, INC. (C2702827)
1      C0786330        09/22/1976      DISSOLVED                          POSSUM INC.   CALIFORNIA                        I. HALPERN
2      C2334141        03/01/2001  FTB SUSPENDED                   POSSUM MEDIA, INC.   CALIFORNIA                   CLAIR G BURRILL
3      C0658630        11/08/1972  FTB SUSPENDED       POSSUM POINT PRODUCTIONS, INC.   CALIFORNIA                               NaN
4      C1713121        09/23/1992  FTB SUSPENDED             POSSUM PRODUCTIONS, INC.   CALIFORNIA                LAWRENCE J. TURNER
5      C1207820        08/05/1983      DISSOLVED  POSSUM-BILITY EXPRESS, INCORPORATED   CALIFORNIA                          R L CARL
6      C3921531        06/27/2016         ACTIVE                      POSSUMS WELCOME   CALIFORNIA  REGISTERED AGENTS INC (C33658

这样做不会正确处理标题,所以如果需要,请不要忘记忽略第一行。

【讨论】:

以上是关于Pandas read_html 返回原始 HTML 内容 [对于某些行/单元格/等]的主要内容,如果未能解决你的问题,请参考以下文章

pandas 没有属性 read_html 树莓派

Pandas pd.read_html() 函数给了我“HTTP 错误 403:禁止”

使用 Pandas 的问题 read_html

pandas read_html ValueError:未找到表

使用 pandas read_html 抓取时将表行分隔为 2

pandas读写结构化数据(read_csv,read_table, read_excel, read_html, read_sql)