現在BeautifulSoupを使用して解析しているWebページがありますが、非常に遅いので、非常に高速であると読んだので、lxmlを試すことにしました。
とにかく、コードを必要なセクションで反復処理するのに苦労しています。lxmlの使用方法がわからず、明確なドキュメントが見つかりません。
とにかく、ここに私のコードがあります:
import urllib, urllib2
from lxml import etree
def wgetUrl(target):
try:
req = urllib2.Request(target)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3 Gecko/2008092417 Firefox/3.0.3')
response = urllib2.urlopen(req)
outtxt = response.read()
response.close()
except:
return ''
return outtxt
newUrl = 'http://www.tv3.ie/3player'
data = wgetUrl(newUrl)
parser = etree.HTMLParser()
tree = etree.fromstring(data, parser)
for elem in tree.iter("div"):
print elem.tag, elem.attrib, elem.text
これはすべてのDIVを返しますが、dev id ='slider1'のみを反復するように指定するにはどうすればよいですか?
div {'style': 'position: relative;', 'id': 'slider1'} None
これは動作しません:
for elem in tree.iter("slider1"):
これはおそらくばかげた質問だと思いますが、理解できません。
ありがとう!
*編集**
このコードを追加することで、以下の出力が得られます。
for elem in tree.xpath("//div[@id='slider1']//div[@id='gridshow']"):
print elem[0].tag, elem[0].attrib, elem[0].text
print elem[1].tag, elem[1].attrib, elem[1].text
print elem[2].tag, elem[2].attrib, elem[2].text
print elem[3].tag, elem[3].attrib, elem[3].text
print elem[4].tag, elem[4].attrib, elem[4].text
出力:
a {'href': '/3player/show/392/57922/1/Tallafornia', 'title': '3player | Tallafornia, 11/01/2013. The Tallafornia crew are back, living in a beachside villa in Santa Ponsa, Majorca. As the crew settle in, the egos grow bigger than ever and cause tension'} None
h3 {} None
span {'id': 'gridcaption'} The Tallafornia crew are back, living in a beachside vill...
span {'id': 'griddate'} 11/01/2013
span {'id': 'gridduration'} 00:27:52
それはすべて素晴らしいですが、上のタグの一部が欠落しています。パーサーはコードを正しく処理していませんか?
私は以下を取得していません:
<img alt="3player | Tallafornia, 11/01/2013. The Tallafornia crew are back, living in a beachside villa in Santa Ponsa, Majorca. As the crew settle in, the egos grow bigger than ever and cause tension" src='http://content.tv3.ie/content/videos/0378/tallaforniaep2_fri11jan2013_3player_1_57922_180x102.jpg' class='shadow smallroundcorner'></img>
なぜそれがこれを引っ張らないのか、何か考えはありますか?
もう一度ありがとう、非常に役立つ投稿..