2016-10-08 2 views
2

Я пытаюсь очистить этот сайт и получить два отдельных тега. Это то, что выглядит html.Python 3 Beautiful Soup find tag with colon

<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> 

теги, которые я пытаюсь получить, являются местонахождение и изображение: название. Проблема, с которой я столкнулась, - это двоеточие в теге 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) 

, но это не работает

+0

Это xml не html и один узел, у которого есть пространство имен, прикрепленное не два. откуда вы его взяли? –

ответ

1

Вы должны разобрать его в "xml" mode вместо (требуется 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-строке, поскольку она изначально не была правильно сформирована.