2017-02-22 8 views
-1

ページをスクラップし、最初の列からすべてのURLを取得しようとしています。私がテキストとして呼び出すとき、私はdiv内のすべてを取得します。しかし、具体的にURLをターゲットにすると、最初のものしか取得できません。どのように私はそれらのすべてを取得する - ストレージのために分離?なぜpythonとBS4は特に呼び出されたときに1つの 'href'しか返さないのですが、テキストとして呼び出されるとすべての値は返されますか?

from bs4 import BeautifulSoup 
from urllib import urlopen 
base_url = "http://www.heavyliftpfi.com/news/" 
html = urlopen(base_url) 
soup = BeautifulSoup(html.read().decode('latin-1', 'ignore'),"lxml") 
main_div = soup.select_one("div.fullWidth") 
div_sub = main_div.select_one("div.leftcol") 
print (div_sub).text # I get that this gets everything as .text 
print (div_sub).h2.a['href'] # alternate - with only one 'href' return 

答えて

1

あなたはタグ名を経由して解析ツリーをナビゲートしているので、あなたが複数の一致がある場合は、最初のものだけが返された名前を、属性。これは予想される動作です。その代わりにfind_all()を検索してみてください。 BS4のドキュメントから

「属性としてタグ名を使用するには、 によって、あなたにその名前を最初のタグを与えるだろう。」あなたはすべてのタグ、または特定の名前を持つ最初のタグよりも何より複雑 を取得する必要がある場合は、あなたがそのようなfind_allとして、ツリーの検索で説明 方法のいずれかを使用する必要があります

」( )

参照:https://www.crummy.com/software/BeautifulSoup/bs4/doc/#navigating-using-tag-names

0

それはfindAllのだったが、私はツリーを上に移動するために必要な

for a in main_div.findAll('a', href=True): 
    print a['href'] 
関連する問題