这是我的html数据:
<td>4.2.2</td>,
<td align="center"><a href="https://blah.org/blah-4.2.2.zip">zip</a> (<a href="https://blah.org/blah-4.2.2.zip.md5">md5</a> | <a href="https://blah.org/blah-4.2.2.zip.sha1">sha1</a>)</td>,
<td align="center"><a href="https://blah.org/blah-.2.2.tar.gz">tar.gz</a> (<a href="https://blah.org/blah-4.2.2.tar.gz.md5">md5</a>|<ahref="https://blah.org/blah-4.2.2.tar.gz.sha1">sha1</a>)</td>,
<td align="center"><a href="https://blah.org/blah-4.2.2-IIS.zip">IISzip</a> (<a href="https://blah.org/blah-4.2.2-IIS.zip.md5">md5</a> | <a href="https://blah.org/blah-4.2.2-IIS.zip.sha1">sha1</a>)</td>,
<td>4.2.1</td>,
<td align="center"><a href="https://blah.org/blah-4.2.1.zip">zip</a> (<a href="https://blah.org/blah-4.2.1.zip.md5">md5</a> | <a href="https://blah.org/blah-4.2.1.zip.sha1">sha1</a>)</td>,
<td align="center"><a href="https://blah.org/blah-4.2.1.tar.gz">tar.gz</a> (<a href="https://blah.org/blah-4.2.1.tar.gz.md5">md5</a> | <a href="https://blah.org/blah-4.2.1.tar.gz.sha1">sha1</a>)</td>,
<td align="center"><a href="https://blah.org/blah-4.2.1-IIS.zip">IIS zip</a> (<a href="https://blah.org/blah-4.2.1-IIS.zip.md5">md5</a> | <a href="https://blah.org/blah-4.2.1-IIS.zip.sha1">sha1</a>)</td>,
<td>4.2</td>
<td>1.0-platinum</td>
等。
我想在页面中向下搜索并仅删除版本号:
<td>4.2.2</td>
标记。例如:
4.2.2
4.2.1
4.2
1.0 - 铂
到目前为止,我已经尝试过:
for tag in html.find_all('tbody', limit=1, string=re.compile("\<td\>(.*?)\<\/td\>")):
print(tag.content)
没有
rpart=html.find('tbody')
for tds in rpart.find_all('td'):
print(tds.find_all('\<td\>(.*?)\<\/td>'))
没有
results=rpart.find_all('td', tds=re.compile("\<td\>(.*?)\<\/td\>"))
没有
wphtml.find('tbody').find_all('td', tds=re.compile('\<td\>(.*?)\<\/td\>'))
没有
for p in rpart.find_all('td', digits=re.compile('\<td\>(.*?)\<\/td\>')):
print(p.contents)
没有
我注意到rpart的类型是“ResultSet”,所以我愿意打赌我失踪的东西。在地球上,我做错了什么?
答案 0 :(得分:1)
首先,第三个标签的最后一个标签中缺少空格。这可能导致使用BeautifulSoup解析问题。
有两种方法可以使用您提供的文字轻松解决此问题:
html = BeautifulSoup(htmlString, 'html.parser')
for tag in html.find_all('td', align=None):
print(tag.string)
Pure Regex(no BeautifulSoup):
for val in re.findall(re.compile('\<td\>(.*?)\<\/td\>'), htmlString):
print val
我能说的最好,因为当使用&#34; find_all&#34;时,BeautifulSoup正在搜索标签名称。函数,re.compile将使用正则表达式来查找与模式匹配的标记名称。例如,如果你想找到所有&#34; tbody&#34;和&#34; td&#34;标签,你可以使用这个:
for tag in html.find_all(re.compile('t[d|b]')):
print tag.string
然后,您可以从找到的标记访问开始和结束标记中的属性或值/字符串。我还没有找到使用BeautifulSoup按照值/字符串查找标记的方法。
如果有帮助,请参考以下几个示例:BeautifulSoup Documentation - A Regular Expression
另外,在BeautifulSoup中,&#34; find_all&#34;中的re.compile。用于&#34;过滤/匹配&#34;,不用于捕获组。意思是,正则表达式是一种匹配的模式。在这种情况下,您无法使用(。*?)提取部分值进行比较。
答案 1 :(得分:-1)
正确的正则表达式是helpers do
def emphasise word
word ?
"<em>#{word}</em>" :
word
end
def bracket word
word ?
"(#{word})" :
word
end
end
。使用<td>(\d+(?:\.\d+)*)</td>
不需要BeautifulSoup:
re.findall