我正试图从此标签中夺取澳大利亚
<tr>
<td>City</td>
<th>Sydney</th>
</tr>
<tr>
<td>Country</td>
<th>Australia</th>
</tr>
import re
from re import findall
a = '<tr>\n<td>Country</td>\n<th>Australia</th>\n</tr>'
country = re.findall(r'<tr><td>Country</td><th>(.*?)</th></tr>',a)
print country
result: []
这是html代码,我尝试使用import re和从re import findall来抢占澳大利亚
我希望结果是:澳大利亚,但这给了我结果:[]
我不希望使用beautifulsoup。谢谢
答案 0 :(得分:1)
答案 1 :(得分:1)
您可以像这样使用re.findall
来仅专门查找pattern = '<tr>\\n<td>Country</td>\\n<th>(.*?)</th>\\n</tr>'
标签:
th
如果您出于某些原因不想使用BeautfulSoup(如下所示)。
>>> import re
>>> html = '<tr>\n<td>Country</td>\n<th>Australia</th>\n</tr>'
>>> country = re.findall(r'<th>(.*?)</th>', html)[0]
>>> country
Australia
答案 2 :(得分:0)
不确定在这种情况下为什么选择regex而不是bs4。对于将来的读者,这可与bs4 4.7.1一起使用。您可以将:contains
伪类与相邻的同级组合器一起使用,以在th
旁边的td
中包含“国家”
from bs4 import BeautifulSoup as bs
html = '''
<tr>
<td>City</td>
<th>Sydney</th>
</tr>
<tr>
<td>Country</td>
<th>Australia</th>
</tr>
'''
soup = bs(html, 'lxml') # 'html.parser' if lxml not installed
countries = soup.select('td:contains(Country) + th')
if countries: print(countries[0].text)