我正在使用urllib2获取网页,我需要在返回的数据中查找特定值。
使用Beautiful Soup并使用find方法或使用正则表达式搜索数据是最好的方法吗?
以下是请求返回的文本的一个非常基本的示例:
<html>
<body>
<table>
<tbody>
<tr>
<td>
<div id="123" class="services">
<table>
<tbody>
<tr>
<td style="PADDING-LEFT: 5px"bgcolor="ffffff" class="style8"> Example BLAB BLAB BLAB </td>
<td style="PADDING-LEFT: 5px"bgcolor="ffffff" class="style8"> BLAB BLAB BLAB </td>
<td style="PADDING-LEFT: 5px"bgcolor="ffffff" class="style8"> BLAB BLAB BLAB </td>
</tr>
<tr>
<td style="PADDING-LEFT: 5px"bgcolor="ffffff" class="style8"> BLAB BLAB BLAB </td>
<td style="PADDING-LEFT: 5px"bgcolor="ffffff" class="style8"> BLAB BLAB BLAB </td>
<td style="PADDING-LEFT: 5px"bgcolor="ffffff" class="style8"> BLAB BLAB BLAB </td>
</tr>
<tr>
<td style="PADDING-LEFT: 5px"bgcolor="ffffff" class="style8"> BLAB BLAB BLAB </td>
<td style="PADDING-LEFT: 5px"bgcolor="ffffff" class="style8"> BLAB BLAB BLAB </td>
<td style="PADDING-LEFT: 5px"bgcolor="ffffff" class="style8"> BLAB BLAB BLAB </td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
</tbody>
</body>
</html>
在这种情况下,我想返回“BLAB BLAB BLAB示例”。唯一保持持久性的是“示例”,我想返回此特定标记内的所有数据。
答案 0 :(得分:5)
Don't use regular expression to parse html/xml.
使用BeautifulSoup,您可以使用css selector:
>>> from bs4 import BeautifulSoup
>>>
>>> html_str = '''
... <html>
... <body>
... <td style="PADDING-LEFT: 5px"bgcolor="ffffff" class="style8"> Example BLAB BLAB BLAB </td>
... <td style="PADDING-LEFT: 5px"bgcolor="ffffff" class="style8"> BLAB BLAB BLAB </td>
... <td style="PADDING-LEFT: 5px"bgcolor="ffffff" class="style8"> BLAB BLAB BLAB </td>
... <td style="PADDING-LEFT: 5px"bgcolor="ffffff" class="style8"> BLAB BLAB BLAB </td>
... </body>
... </html>
... '''
>>> soup = BeautifulSoup(html_str)
>>> for td in soup.select('.style8'):
... print(td.text)
...
Example BLAB BLAB BLAB
BLAB BLAB BLAB
BLAB BLAB BLAB
BLAB BLAB BLAB