我正在尝试抓取一个网站。我已经能够将网站上的内容转化为字符串/文件。
现在,我想搜索具有以下内容的特定行:
<li><span class="abc">Key 1:</span> <span class="aom_pb">Value 1</span></li>
保证只有一个 Key 1: 在网站上,我需要获取 Value 1。 最好的方法是什么。 如果它是通过正则表达式,你能帮我看看它应该是什么样子吗?我没怎么用过正则表达式。
问候, Assets 管理公司
请您参考如下方法:
与其使用正则表达式,不如让 BeautifulSoup 开始解析 html。
然后,您可以使用内置的查找功能来搜索“abc”和“aom_pb”类。
import BeautifulSoup
soup = BeautifulSoup.BeautifulSoup(downloaded_str)
key = soup.find('span', {'class': 'abc'}).text
value = soup.find('span', {'class': 'aom_pb'}).text
如果类标签不是唯一的,只需遍历它们直到找到正确的标签:
for li in soup.findAll('li'):
if li.find('span', attrs={'class': 'abc'}, text='Key 1:'):
print li.find('span', {'class': 'aom_pb'}).text
关键是让解析器将其转化为树导航问题,而不是定义不明确的文本搜索问题。
BeautifulSoup 是一个单一的纯 Python 文件,可以轻松添加到您的设置中。这是一个受欢迎的选择。更复杂的替代方案包括 html5lib和 lxml .标准库包括 HTMLParser , 但它有点简单并且不能很好地处理格式错误的 HTML。
正则表达式方法有点脆弱,但您可以尝试这样的方法(取决于数据通常的布局方式):
>>> s = '''<li><span class="abc">Key 1:</span> <span class="aom_pb">Value 1</span></li>'''
>>> re.search(r'Key 1:.*?(Value .*?)<', s).group(1)
'Value 1'
