全体をコンテンツ管理システムに移行するという長期的な目標を持って、友人の (不格好な場合は構造化された) Web サイトをスクレイピングするプロセスをたどることで、BeautifulSoup と Python の方向性を理解しています。
soup = BeautifulSoup(urllib2.urlopen("http://www.bicyclepaintings.com/archive/index.html")
コンソールで正確に 1 つのセル ( ) を引き出すと、次のようになります。
cell = soup.find_all('td',{'valign':'bottom'})[3]
部分文字列を引き出して遊ぶことができます。これらはすべて正常に動作します: cell.br.next_sibling
, cell.find('b').text
. しかし、for ループですべてのセルをループしようとすると、次のようになります。
def parse_archive(url):
soup = get_soup(url)
paintings = []
for cell in soup.find_all('td',{'valign':'bottom'}):
painting_title = cell.find('b').text
painting_media = cell.br.next_sibling
record = painting_title, painting_media
paintings.append(record)
return paintings
属性エラー ( AttributeError: 'NoneType' object has no attribute 'text'
) が表示されます。ループバックすることで、同じ情報の一部を取得できます。
for item in cell.find_all('b'):
painting_title = item.text
しかし、兄弟に到達する方法が<br/>
わかりません (より要点を言えば) 1 つのアイテムを引き出すと機能するのに、for ループを介してそれらにアクセスしようとすると機能しない理由がわかりません。ここで何が欠けていますか?