pir*_*ray 26 python beautifulsoup
我注意到使用BeautifulSoup时有些奇怪的事情,找不到任何文档来支持这个,所以我想在这里问一下.
假设我们有一个像我们用BS解析的标签:
<td>Some Table Data</td>
<td></td>
Run Code Online (Sandbox Code Playgroud)
该官方文件的方式来提取数据soup.string.但是,这为第二个<td>标记提取了NoneType .所以我尝试了soup.text(因为为什么不呢?)并且它完全按照我的意愿提取了一个空字符串.
但是我在文档中找不到任何对此的引用,并且担心某些事情是错过的.任何人都可以告诉我这是否可以使用或以后会引起问题?
顺便说一句,我正在从网页上抓取表格数据,并且意味着从数据创建CSV,所以我确实需要空字符串而不是NoneTypes.
sal*_*hed 48
.string在Tag类型对象上返回一个NavigableString类型对象.另一方面,.text获取所有子字符串并使用给定的分隔符返回连接.返回类型.text是unicode对象.
从文档中,A NavigableString就像一个Python Unicode字符串,除了它还支持导航树 和搜索树中描述的一些功能.
从文档上.string我们可以看到,如果html是这样的,
<td>Some Table Data</td>
<td></td>
Run Code Online (Sandbox Code Playgroud)
然后,.string在第二个td将返回None.但是.text会返回并清空一个unicode类型对象的字符串.
为了更方便,
<td>some text</td>
<td></td>
<td><p>more text</p></td>
<td>even <p>more text</p></td>
Run Code Online (Sandbox Code Playgroud)
string以获取此标记内的单个字符串.tag有一个字符串子项,则返回值为该字符串.tag没有孩子或多个孩子,则返回值为tagNone有一个子标记,则返回值是子标记的'string'属性,递归.和 tag
如果text是这样的:
some text
None
more text
None
Run Code Online (Sandbox Code Playgroud)
html四人.string将返回,
some text
more text
even more text
Run Code Online (Sandbox Code Playgroud)
td 会得到这样的结果,
<td>Some Table Data</td>
<td></td>
Run Code Online (Sandbox Code Playgroud)
小智 7
如果一个标签包含不止一个东西,那么它\xe2\x80\x99s不清楚.string应该引用什么,所以.string被定义为None:
\n\n例子:
\n\n<td>sometext<p>sometext</p></td>\nRun Code Online (Sandbox Code Playgroud)\n\n如果 td.string 完成,上面的代码将返回 NoneType,因为 td 包含文本以及另一个 p 标签。但 td.text 会给出: sometextsometext
\n