代码之家  ›  专栏  ›  技术社区  ›  Konstantin Rusanov

BeautifulSoup在XML块内找不到标记

  •  1
  • Konstantin Rusanov  · 技术社区  · 8 年前

    试图解析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)
    

    <数据flickr嵌入=“真” href=”https://www.flickr.com/photos/10338828@N00/31295110800/in/dateposted public/“ title=“puerto02”>&书信电报;img src=”https://c1.staticflickr.com/1/489/31295110800_93f48b9bd2_o.jpg" 宽度=“1289”高度=“856”alt=“puerto02”></a>&书信电报;br />&书信电报;br/>° ° ±° °° °° <span class=“ljuser i-ljuser-i-ljuser-type-P” 数据ljuser=“puertto”lj:user=“puerto”>&书信电报;一 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>普尔托</b></a></span>° ° °·. §· ° ·±°°. ° °. ° - ° °, · ° ° ±? ... 没有一个

    2 回复  |  直到 8 年前
        1
  •  3
  •   Shane    8 年前

    实际上满足于 <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>
    
        2
  •  0
  •   宏杰李    8 年前
    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文本块的单个标记。 如果你想使用 find() 在这个HTML文本上,您应该基于它制作一个新的汤。