2010-11-23 14 views
2

BeautifulSoupまたはLXMLがどのように機能するかについては、高く評価しました。確かに、彼らのドキュメントは素晴らしいですが、私のような人にとっては、Python /プログラミング初心者のために、私が探しているものを解読するのは難しいです。Python、BeautifulSoup、またはLXML - CSSタグを使用してHTMLから画像URLを解析する

私の最初のプロジェクトとして、私はPythonを使って投稿リンク用のRSSフィードを解析しています。私はこれをFeedparserで完成させました。私の計画は、各投稿の画像をこすりつけることです。しかし、私の人生にとって、私はBeautifulSoupかLXMLのどちらを手に入れようとしているのか分かりません!私は何時間もドキュメントを読んで、無駄にグーグルで遊んでいたので、私はここにいます。以下は、大きな画像(私のスクレイピー)からの線です。

<div class="bpBoth"><a name="photo2"></a><img src="http://inapcache.boston.com/universal/site_graphics/blogs/bigpicture/shanghaifire_11_22/s02_25947507.jpg" class="bpImage" style="height:1393px;width:990px" /><br/><div onclick="this.style.display='none'" class="noimghide" style="margin-top:-1393px;height:1393px;width:990px"></div><div class="bpCaption"><div class="photoNum"><a href="#photo2">2</a></div>In this photo released by China's Xinhua news agency, spectators watch an apartment building on fire in the downtown area of Shanghai on Monday Nov. 15, 2010. (AP Photo/Xinhua) <a href="#photo2">#</a><div class="cf"></div></div></div> 

ので、ドキュメントの私の理解によると、私は次のように渡すことができる必要があります:

soup.find("a", { "class" : "bpImage" }) 

そのCSSクラスを持つすべてのインスタンスを検索します。まあ、何も返さない。私は何か自明なことを見落としていると確信していますので、私はあなたの忍耐を大いに感謝します。

ありがとうございました。

は、将来のGooglerのために、私は私のfeedparserコードが含まれます:

#! /usr/bin/python 

# RSS Feed Parser for the Big Picture Blog 

# Import applicable libraries 

import feedparser 

#Import Feed for Parsing 
d = feedparser.parse("http://feeds.boston.com/boston/bigpicture/index") 

# Print feed name 
print d['feed']['title'] 

# Determine number of posts and set range maximum 
posts = len(d['entries']) 

# Collect Post URLs 
pointer = 0 
while pointer < posts: 
    e = d.entries[pointer] 
    print e.link 
    pointer = pointer + 1 

答えて

3

lxmlのを使用して、あなたはこのような何かを行う可能性があります:タグを検索するためにpyparsingを使用し

import feedparser 
import lxml.html as lh 
import urllib2 

#Import Feed for Parsing 
d = feedparser.parse("http://feeds.boston.com/boston/bigpicture/index") 

# Print feed name 
print d['feed']['title'] 

# Determine number of posts and set range maximum 
posts = len(d['entries']) 

# Collect Post URLs 
for post in d['entries']: 
    link=post['link'] 
    print('Parsing {0}'.format(link)) 
    doc=lh.parse(urllib2.urlopen(link)) 
    imgs=doc.xpath('//img[@class="bpImage"]') 
    for img in imgs: 
     print(img.attrib['src']) 
+0

これは完璧です。どうもありがとうございました。 – tylerdavis

1

あなたはbpImageクラスを持つすべてのaの要素のルックスを掲載しているコード。しかし、あなたの例は、ではなく、img要素にbpImageクラスを持っています。あなただけ実行する必要があります。

soup.find("img", { "class" : "bpImage" }) 
+0

母。もちろん。それはタグ付きのURLを返します。それらをURLに限定する方法はありますか? – tylerdavis

1

はかなり直感的です:

from pyparsing import makeHTMLTags, withAttribute 

imgTag,notused = makeHTMLTags('img') 

# only retrieve <img> tags with class='bpImage' 
imgTag.setParseAction(withAttribute(**{'class':'bpImage'})) 

for img in imgTag.searchString(html): 
    print img.src 
関連する問題