0

次のコードがあります:

for table in soup.findAll("table","tableData"):
    for row in table.findAll("tr"):
        data = row.findAll("td")
        url = data[0].a
        print type(url)

次の出力が得られます:

<class 'bs4.element.Tag'>

つまり、そのurlはクラスTagのオブジェクトであり、このオブジェクトから属性を取得できます。しかし、私が置き換えるprint type(url)print url['href']、次のトレースバックが得られます

Traceback (most recent call last):
File "baseCreator.py", line 57, in <module>
    createStoresTable()
File "baseCreator.py", line 46, in createStoresTable
    print url['href']
TypeError: 'NoneType' object has no attribute '__getitem__'

なにが問題ですか?そして、href属性の値を取得する方法。

4

1 に答える 1

2

私は好きですBeautifulSoupが、個人的には XPath を利用できるので(風変わりなlxml.htmlHTMLではないので) 好みます。

import lxml.html
page = lxml.html.parse('http://somesite.tld')
print page.xpath('//tr/td/a/@href')

構造によっては、何らかの形の「軸」を実装する必要がある場合があります。

elementsoupパーサーとしても使用できます- 詳細はhttp://lxml.de/elementsoup.htmlを参照してください

于 2012-07-26T18:16:47.910 に答える