BeautifulSoup无法在XML块

时间:2017-01-31 11:33:02

标签: python xml python-3.x parsing beautifulsoup

尝试解析XML文件,获得内容描述,其中包含标记和img标记。但如果我试图在描述中找到一个标签 - 我没有。

from bs4 import BeautifulSoup
import requests

url = 'http://lavagra.livejournal.com/data/rss&count=10&ranked=newest&similar=true'


r = requests.get(url)

soup = BeautifulSoup(r.content, 'xml')
items = soup.find_all('item')
# print(items)
for item in items:
    description = item.find('description')
    print(description)
    link = description.find('a')
    print(link)
  

< a data-flickr-embed =“true”   HREF = “https://www.flickr.com/photos/10338828@N00/31295110800/in/dateposted-public/”   标题= “puerto02” >< IMG   SRC = “https://c1.staticflickr.com/1/489/31295110800_93f48b9bd2_o.jpg”   width =“1289”height =“856”alt =“puerto02”>< / a>< br   />< br />СитуациясарестомблоггераАлександраЛапшина   < span class =“ljuser i-ljuser i-ljuser-type-P”   data-ljuser =“puerrtto”lj:user =“puerrtto”>< a   href =“http://puerrtto.livejournal.com/profile”target =“_ self”   class =“i-ljuser-profile”>< img class =“i-ljuser-userhead”   SRC = “http://l-stat.livejournal.net/img/userinfo.gif?v=17080?v=144.7”   />< / a>< a href =“http://puerrtto.livejournal.com/”   class =“i-ljuser-username”target =“_ self”
  >< b> puerrtto< / b>< / a>< / span>вБеларуси   вступилавкритическуюфазу。 Черезнесколькоднейегоскореевсего   экстрадируютвАзербайджан。 Предвижувосторженноеулюлюканьев   комментариях。 Толькохочуспроситьвсехктонеравнодушенкэтомуделу    - некажетсялиВам,чтосоюзноегосударствоРоссиисБеларусьюлишьблеф? ......没有

2 个答案:

答案 0 :(得分:2)

实际上<description>标签中的内容是用html实体编码的,例如&lt;<,因此在解析之前需要对这些实体进行非转义。您可以使用内置HTMLParser.HTMLParser().unescape()来完成这项工作。

import requests
import HTMLParser
from bs4 import BeautifulSoup as soup

response = requests.get('http://lavagra.livejournal.com/data/rss&count=10&ranked=newest&similar=true')
html = soup(HTMLParser.HTMLParser().unescape(response.text), 'lxml')

items = html.find_all('item')

for item in items:
    description = item.find('description')
    print description
    link = description.find('a')
    print link

示例输出:

<description><a data-flickr-embed="true" href="https://www.flickr.com/photos/10338828@N00/22815391628/in/dateposted-public/" title="airpors31"><img alt="airpors31" height="853" src="https://c5.staticflickr.com/6/5510/22815391628_536b514355_o.jpg" width="1280"/></a><br/><br/>Одно из моих любимых занятий в каждом новом своём путешествии  - разглядывать мир через окно. Видимо, это увлечение пришло ещё с детства. Условная граница между внешним и внутренним в виде стекла – важный элемент познания и, одновременно, гарантия безопасности, пусть и относительной. <br/><br/>Апофеоз этого развлечения – полёты на самолётах. Обожаю смотреть на наш мир с высоты! Да, и фотографии отсюда после небольшой обработки получаются подчас потрясающими. Вспоминается сразу <b><a href="http://lavagra.livejournal.com/118549.html">Индонезия</a></b> или <b><a href="http://lavagra.livejournal.com/111325.html">Китай</a></b>. <br/><br/>На этот раз хочу Вам представить страну, которая меня поразила своими инопланетными пейзажами. Репортажи об Иране мне приятно начинать именно с этих фотографий. <br/><br/><a data-flickr-embed="true" href="https://www.flickr.com/photos/10338828@N00/30693303360/in/dateposted-public/" title="airpors37"><img alt="airpors37" height="860" src="https://c1.staticflickr.com/6/5669/30693303360_4048de4dce_o.jpg" width="1280"/></a><br/>2.<br/><br/>Большую часть этих снимков я  сделал во время внутреннего перелёта  по этой стране из Тегерана в Шираз. Эта часть Ирана запоминается очень пустынными и неуютными видами. <br/><br/><a data-flickr-embed="true" href="https://www.flickr.com/photos/10338828@N00/22815391828/in/dateposted-public/" title="airpors30"><img alt="airpors30" height="853" src="https://c5.staticflickr.com/6/5588/22815391828_364fb11ccf_o.jpg" width="1280"/></a><br/>3.<br/><br/>Горные россыпи сменяются пустынными долинами без лесов и рек, а за  ними вновь идут безжизненные горные кручи. <br/><br/><a data-flickr-embed="true" href="https://www.flickr.com/photos/10338828@N00/30878361492/in/dateposted-public/" title="airpors36"><img alt="airpors36" height="864" src="https://c5.staticflickr.com/6/5335/30878361492_cd0dc6c7bf_o.jpg" width="1280"/></a><br/>4.<br/><br/>Причём оттенки  здесь преобладают тёмно-коричневые или рыжие. <br/><br/><a data-flickr-embed="true" href="https://www.flickr.com/photos/10338828@N00/30692233240/in/dateposted-public/" title="airpors09"><img alt="airpors09" height="853" src="https://c1.staticflickr.com/6/5693/30692233240_64aa0630d1_o.jpg" width="1280"/></a><br/>5.<br/><br/>Даже полувысохшие местные солёные озёра не придают жизни этим почти зловещим картинам. <br/><br/><a data-flickr-embed="true" href="https://www.flickr.com/photos/10338828@N00/30692233080/in/dateposted-public/" title="airpors11"><img alt="airpors11" height="854" src="https://c1.staticflickr.com/6/5671/30692233080_b0fdb2457a_o.jpg" width="1280"/></a><br/>6.<br/><br/>Возможно, эти картинки кому-то покажутся скучными и однообразными, но лично мне они больше напоминают некую инопланетную реальность. <br/><br/><a data-flickr-embed="true" href="https://www.flickr.com/photos/10338828@N00/22815391178/in/dateposted-public/" title="airpors34"><img alt="airpors34" height="857" src="https://c3.staticflickr.com/6/5823/22815391178_5600e97e83_o.jpg" width="1280"/></a><br/>7.<br/><br/>Даже города в этом регионе выглядят непривычно чужеродными. <br/><br/><a data-flickr-embed="true" href="https://www.flickr.com/photos/10338828@N00/22815391928/in/dateposted-public/" title="airpors29"><img alt="airpors29" height="853" src="https://c1.staticflickr.com/6/5448/22815391928_ab1062d233_o.jpg" width="1280"/></a><br/>8.<br/><br/>И всё же это наша Земля, которая бесподобна в своём разнообразии. И Иран по-своему прекрасен. <br/><br/><a data-flickr-embed="true" href="https://www.flickr.com/photos/10338828@N00/22815393938/in/dateposted-public/" title="airpors10"><img alt="airpors10" height="853" src="https://c3.staticflickr.com/6/5715/22815393938_abf5608fe8_o.jpg" width="1280"/></a><br/>9.<br/><br/>Если же присмотреться к картинкам с высоты, то даже в этих негостеприимных просторах можно увидеть множество признаков активной человеческой деятельности. <br/><br/><a data-flickr-embed="true" href="https://www.flickr.com/photos/10338828@N00/30757984966/in/dateposted-public/" title="iran01"><img alt="iran01" height="854" src="https://c7.staticflickr.com/6/5322/30757984966_c0d506f962_o.jpg" width="1280"/></a><br/>10.<br/><br/>И чем ближе аэродром, тем Иран выглядит всё более оживлённым. <br/><br/><a data-flickr-embed="true" href="https://www.flickr.com/photos/10338828@N00/22815391348/in/dateposted-public/" title="airpors32"><img alt="airpors32" height="853" src="https://c5.staticflickr.com/6/5468/22815391348_77a42fc21e_o.jpg" width="1280"/></a><br/>11.<br/><br/>Утренний Тегеран подсвечивается огоньками улиц и площадей. Не сложно понять, что это огромный мегаполис. Кстати, буквально несколько секунд до нижнего снимка мы пролета огромное кладбище самолётов. Жалко не успел его сфотографировать. <br/><br/><a data-flickr-embed="true" href="https://www.flickr.com/photos/10338828@N00/30692233340/in/dateposted-public/" title="airpors08"><img alt="airpors08" height="861" src="https://c5.staticflickr.com/6/5329/30692233340_154b633a7e_o.jpg" width="1280"/></a><br/>12.<br/><br/>Но даже этот огромный город не идёт ни в какое сравнение с турецким Стамбулом. Не могу не выложить хотя бы одно фото этого интереснейшего города. Ночные снимки с высоты не мой конёк, но всё же взгляните на этот странный иероглиф улиц азиатской части города с светящимся окном футбольного стадиона. <br/><br/><a data-flickr-embed="true" href="https://www.flickr.com/photos/10338828@N00/22815391058/in/dateposted-public/" title="airpors35"><img alt="airpors35" height="858" src="https://c3.staticflickr.com/6/5759/22815391058_5c9a56953b_o.jpg" width="1280"/></a><br/>13.<br/><br/>На этом я пока закончу. Впереди уже очень скоро Вас ждёт репортаж об иранских аэропортах. Они сильно отличаются от привычных нам и поэтому очень интересны. Так что будьте на связи...<br/><br/><a data-flickr-embed="true" href="https://www.flickr.com/photos/10338828@N00/30692233410/in/dateposted-public/" title="airpors06"><img alt="airpors06" height="860" src="https://c3.staticflickr.com/6/5489/30692233410_1de351b6cf_o.jpg" width="1280"/></a><br/>14.<br/><br/><b>P.S. Подписывайтесь на мою страницу <b><a href="https://www.facebook.com/stanislav.gorbunov">в Фейсбуке</a></b>, а также в <b><a href="https://www.instagram.com/lavagra/">Инстаграме</a></b>. Смотрите все прибалтийские новости в <b><a href="http://www.travelblog.lv/">ТравелБлоге</a></b>. Cледите за моими путешествиями по Прибалтике и во всем мире! Заходите, подписывайтесь, читайте, комментируйте.</b><br/><a name="cutid1-end"></a><br/></description>
<a data-flickr-embed="true" href="https://www.flickr.com/photos/10338828@N00/22815391628/in/dateposted-public/" title="airpors31"><img alt="airpors31" height="853" src="https://c5.staticflickr.com/6/5510/22815391628_536b514355_o.jpg" width="1280"/></a>

答案 1 :(得分:0)

for item in items:
    description = item.find('description')
    # description will retrun a block of text, you should make a new soup based on this text.
    des_soup = BeautifulSoup(description.text, 'lxml')
    link = des_soup.find('a').get('href')
    print(link)

出:

https://www.flickr.com/photos/10338828@N00/31295110800/in/dateposted-public/
https://www.flickr.com/photos/10338828@N00/32554151306/in/dateposted-public/
https://www.flickr.com/photos/10338828@N00/31664203504/in/dateposted-public/
http://puerrtto.livejournal.com/profile
https://www.flickr.com/photos/10338828@N00/32372705715/in/dateposted-public/
https://www.flickr.com/photos/10338828@N00/32317072255/in/dateposted-public/
https://www.flickr.com/photos/10338828@N00/32048248861/in/dateposted-public/
https://www.flickr.com/photos/10338828@N00/32058782725/in/dateposted-public/

description标记是仅包含HTML文本块的单个标记。 如果你想在这个HTML文本上使用find(),你应该根据它做一个新汤。