【爬虫笔记】关于Beautiful Soup 4
再使用Beautiful Soup 4时遇到了一些问题,找到了解决方法,通过本博文将遇到的问题和解决方法记录下来,方便回顾也希望能帮助大家解决类似问题。
1. 遇到“Some characters could not be decoded, and were replaced with REPLACEMENT CHARACTER.”警告
遇到这个错误的原因是“文档包含以完全不同的编码编写的文本”,这时候需要待解析文本的指定编码方式,通常可以在网页源码中找到网页的编码方式,就像下图:
接着,只需要在原来调用beautiful soup的语句中指定编码方式即可:
soup = BeautifulSoup(html, "html.parser",from_encoding="uft-8")
参考博文:https://www.cnblogs.com/HANYI7399/p/6080070.html
2. 需要获取相同标签的非第一个元素
利用bs4获取标签下的子元素内容时可以利用“本元素.子元素标签”的方式访问,但是这样的访问方式默认是返回对应标签的第一个元素的,这时候可以利用find_all方法达到这个效果。
例子:
HTML源码段为:
<tr class="abc">
<td align="center">1</td>
<td align="center">text1</td>
<td class="tits"><a target="_blank" href="http://xxxx.xxx/xxx">text2</a>
<div class="xxx">
<table class="xxxx">
<tbody>
<tr>
<td><span>text3</span></td>
<td>text4</td>
<td><span>text5</span></td>
<td>text6</td>
</tr>
<tr>
<td><span>text6</span></td>
<td><span>text7</span></td>
<td>text8</td>
</tr>
<tr>
<td><span>text9</span></td>
<td>text10</td>
<td><span>text11</span></td>
</tr>
<tr>
<td><span>text12</span></td>
<td colspan="3">text13</td>
</tr>
</tbody>
</table>
</div>
</td>
<td align="center">text14</td>
</tr>
假如我们已经获取到了以上HTML源码中的<tr>元素,现在希望获取到文本“text14”,可以利用以下代码实现。
zcTime = item.find_all('td')[15].get_text()
需要注意的是,使用find_all方法时,会得到元素下所有符合要求的元素,不仅包括元素的子元素,还包括子元素的子元素,以及子元素的子元素的子元素......(无线套娃~~),因此在以上HTML源码段中text14所在的位置是在bs4获取的第15个<td>元素中。
本文来自博客园,作者:逸笔
转载请注明原文链接:https://www.cnblogs.com/1blog/p/15186565.html