2012-01-29 2 views
1

Я работаю над тем, чтобы правильно анализировать XML-файлы и RSS-каналы, и у вас возникла небольшая проблема. Я использую feedbarser в python для синтаксического анализа определенной записи из RSS-канала, но не могу понять, как анализировать только один img src из раздела контента.RSS/Python - Разбор URL-адреса одного изображения

Вот что у меня есть.

import dirFeedparser.feedparser as feedparser 

feedurl = feedparser.parse('http://dustinheroin.chompblog.com/index.php?cat=22&feed=rss2') 
statusupdate = feedurl.entries[0].content 

print statusupdate 

Теперь, когда я печатаю содержание я получаю это:

[{'base': u'http://dustinheroin.chompblog.com/index.php?cat=22&feed=rss2', 'type': u'text/html', 'value': u'<p><a href="http://dustinheroin.chompblog.com/wp-content/uploads/2012/01/20120129-154945.jpg"><img alt="20120129-154945.jpg" class="alignnone size-full" src="http://dustinheroin.chompblog.com/wp-content/uploads/2012/01/20120129-154945.jpg" /></a></p>', 'language': None}] 

Какой метод будет лучше, чтобы получить IMG SRC из этого? Любая помощь приветствуется, спасибо!

+0

Значение, которое вы показали нам, что это '' Content' или statusupdate'. – RanRag

ответ

2

@Lattyware, у вас есть какие-то проблемы с установкой мыла.

@ user1130601, вы можете проверить следующий код:

#!/usr/bin/python 

from BeautifulSoup import BeautifulSoup 
import feedparser 

feedurl = feedparser.parse('http://dustinheroin.chompblog.com/index.php?cat=22&feed=rss2') 
statusupdate = feedurl.entries[0].content 


soup = BeautifulSoup(statusupdate[0]['value']) 
print(soup.find("img")["src"]) 

Выход:

http://dustinheroin.chompblog.com/wp-content/uploads/2012/01/20120129-171134.jpg 
+0

После того, как вам пришлось внести пару изменений в файл feedparser.py, мне удалось добиться отличных результатов. Благодаря! – user1130601

3

Затем вы хотите использовать отдельный синтаксический анализатор HTML для анализа HTML-кода и получить атрибут imgsrc. Вы можете посмотреть в Beautiful Soup.

например:

from BeautifulSoup import BeautifulSoup 
import feedparser 

feedurl = feedparser.parse('http://dustinheroin.chompblog.com/index.php?cat=22&feed=rss2') 
statusupdate = feedurl.entries[0].content[0] 

soup = BeautifulSoup(statusupdate["value"]) 
print(soup.find("img")["src"]) 

Обратите внимание, что это просто использует первый img тег он находит. Если вам нужно быть более избирательным, посмотрите на findall.

3

Если вы хотите получить хороший парсер HTML, попробуйте BeautifulSoup.

Это легко разобрать с ним:

from BeautifulSoup import BeautifulSoup 

soup = BeautifulSoup(statusupdate['value']) 
url = soup.find('img').src 
+0

Элемент - это словарь, поэтому вам нужно получить доступ к атрибуту с помощью ["src"] not .src - как в моем ответе. –

+0

BeautifulSoup работает с любым подходом. Элемент * действует * как словарь, но является объектом «BeautifulSoup.Tag». – Blender

+0

Я пробовал это, и это не сработало для меня. Я обратился к нему как к объекту, подобному словарю, и он работал, как атрибут, я получил None. Я просто попытался снова к тому же концу –

3

Вы также можете попробовать lxml. С помощью lxml вы можете использовать xpath expressions.

Здесь x является вашим статусом обновления.

from lxml import etree 
st = x[0]["value"] 
doc = etree.fromstring(st) 
value = doc.xpath("//img/@src") #xpath expr = //img/@src 
"".join(value) 

Выход = 'http://dustinheroin.chompblog.com/wp-content/uploads/2012/01/20120129-154945.jpg'

Смежные вопросы