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”。我想做的是以某种方式获取单元格的全部内容,包括<img>
标记的[原始?] 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 表格以及您想要的任何特定行 (<tr>
) 或单元格 (<td>
)。
>>> 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 pd.read_html() 函数给了我“HTTP 错误 403:禁止”
pandas read_html ValueError:未找到表
使用 pandas read_html 抓取时将表行分隔为 2
pandas读写结构化数据(read_csv,read_table, read_excel, read_html, read_sql)