2024-10-03 13:23:49 发布
网友
我正在尝试创建一个网站。我已经能够将网站上的内容放入一个字符串/文件中。在
现在,我想搜索一个特定的行,它包含以下内容:
<li><span class="abc">Key 1:</span> <span class="aom_pb">Value 1</span></li>
有必要只有一个键1:在网站上,我需要得到值1。 最好的办法是什么。 如果它是通过正则表达式,你能帮我看看它应该是什么样子吗。我很少用正则表达式。在
谨致问候, 安姆
应该使用^{}这样的解析器从HTML中提取数据。对这样的任务使用正则表达式是A Bad Ideatm。在
Lxml允许您使用XPath表达式来选择元素,在这种情况下,可以使用表达式//span[@class='abc' and text()='Key 1:']选择相关的“键”范围。此表达式只在整个树中搜索具有abc类且包含确切文本Key 1:的span元素。在
//span[@class='abc' and text()='Key 1:']
abc
Key 1:
span
然后可以在元素上使用.getnext()来获得包含所需数据的以下元素。在
.getnext()
下面是一个完整的方法:
import lxml.html as lh html = """ <html> <head> <title>Test</title> </head> <body> <ul> <li><span class="abc">Key 3:</span> <span class="aom_pb">Mango</span></li> <li><span class="abc">Key 1:</span> <span class="aom_pb">Pineapple</span></li> <li><span class="abc">Key 2:</span> <span class="aom_pb">Apple</span></li> <li><span class="abc">Key 7:</span> <span class="aom_pb">Peach</span></li> </ul> </body> </html> """ tree = lh.fromstring(html) for key_span in tree.xpath("//span[@class='abc' and text()='Key 1:']"): print key_span.getnext().text
结果:
Pineapple
我不使用regex,而是让BeautifulSoup解析html。在
然后,您可以使用内置的find函数来搜索“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
如果类标记不是唯一的,只需循环它们,直到找到正确的一个:
关键是让解析器将其转化为树导航问题,而不是定义不清的文本搜索问题。在
beauthoulsoup是一个单一的纯python文件,很容易添加到您的设置中。这是一个很受欢迎的选择。更复杂的选择包括html5lib和{a3}。标准库包括HTMLParser,但它有点过于简单,不能很好地处理格式错误的HTML。在
regex方法有点脆弱,但您可以尝试这样的方法(取决于数据通常的布局方式):
>>> 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'
你不应该使用正则表达式来解析HTML。有一个python的HTML解析器模块,恰当地命名为HTMLParser。http://docs.python.org/library/htmlparser.html
HTMLParser
应该使用^{} 这样的解析器从HTML中提取数据。对这样的任务使用正则表达式是A Bad Ideatm。在
Lxml允许您使用XPath表达式来选择元素,在这种情况下,可以使用表达式
//span[@class='abc' and text()='Key 1:']
选择相关的“键”范围。此表达式只在整个树中搜索具有abc
类且包含确切文本Key 1:
的span
元素。在然后可以在元素上使用
.getnext()
来获得包含所需数据的以下元素。在下面是一个完整的方法:
结果:
Pineapple
我不使用regex,而是让BeautifulSoup解析html。在
然后,您可以使用内置的find函数来搜索“abc”和“aom_-pb”类。在
如果类标记不是唯一的,只需循环它们,直到找到正确的一个:
^{pr2}$关键是让解析器将其转化为树导航问题,而不是定义不清的文本搜索问题。在
beauthoulsoup是一个单一的纯python文件,很容易添加到您的设置中。这是一个很受欢迎的选择。更复杂的选择包括html5lib和{a3}。标准库包括HTMLParser,但它有点过于简单,不能很好地处理格式错误的HTML。在
regex方法有点脆弱,但您可以尝试这样的方法(取决于数据通常的布局方式):
你不应该使用正则表达式来解析HTML。有一个python的HTML解析器模块,恰当地命名为
HTMLParser
。http://docs.python.org/library/htmlparser.html相关问题 更多 >
编程相关推荐