繁体   English   中英

Python 3 Beautiful Soup用冒号查找标签

[英]Python 3 Beautiful Soup find tag with colon

我试图抓住这个网站,并获得两个单独的标签。 这就是html的样子。

<url>
  <loc>
    http://link.com
  </loc>
  <lastmod>date</lastmode>
  <changefreq>daily</changefreq>
  <image:image>
   <image:loc>
    https://imagelink.com
   <image:loc>
   <image:title>Item title</image:title>
  <image:image>
</url>

我想要获得的标签是loc和image:title。 我遇到的问题是标题标签中的冒号。 我到目前为止的代码是

r = requests.get(url)
soup = BeautifulSoup(r.content, 'html.parser')

for item in soup.find_all('url'):
    print(item.loc)
    #print image title

我也试过做

print(item.title)

但这不起作用

您应该以“xml”模式解析它(也需要安装lxml ):

from bs4 import BeautifulSoup

data = """
<url>
  <loc>
    http://link.com
  </loc>
  <lastmod>date</lastmod>
  <changefreq>daily</changefreq>
  <image:image>
   <image:loc>
    https://imagelink.com
   </image:loc>
   <image:title>Item title</image:title>
  </image:image>
</url>"""

soup = BeautifulSoup(data, 'xml')

for item in soup.find_all('url'):
    print(item.title.get_text())

打印Item title

请注意,我已经对XML字符串应用了几个修复程序,因为它最初是非格式良好的。

我正在使用BeautifulSoup解析Confluence XHTML,而alecxe的解决方案并不能让我满意,因为我真的需要BeautifulSoup的html模式。

所以我找到了一个使用正则表达式的hacky解决方案:

>>> import re
>>> from bs4 import BeautifulSoup
>>>
>>> data = """
... <url>
...   <loc>
...     http://link.com
...   </loc>
...   <lastmod>date</lastmod>
...   <changefreq>daily</changefreq>
...   <image:image>
...    <image:loc>
...     https://imagelink.com
...    </image:loc>
...    <image:title>Item title</image:title>
...   </image:image>
... </url>"""
>>>
>>> soup = BeautifulSoup(data, 'html.parser')
>>> soup.find_all('image:title')  # nope, bs4 won't allow us to do this
[]
>>> soup.find_all(re.compile('image:title'))  # but this works
[<image:title>Item title</image:title>]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM