2017-06-21 11 views
1

を使用してアンカータグ内の複数の属性から単一の属性を抽出、これは私のコードです:タイトルを1としてBeautifulSoup

import bs4 
import re 
from urllib.request import urlopen as uReq 
from bs4 import BeautifulSoup as soup 

my_url = "https://finance.yahoo.com/screener/predefined/undervalued_growth_stocks" 

loadpage = uReq(my_url) 
showloadpage = loadpage.read() 
loadpage.close() 

soupit = soup(showloadpage, "html.parser") 

#the regex works - returns all of the "tr" tags, i.e. containers 
containers = soupit.findAll("tr", {"class" : re.compile("data-row.*")}) 


for container in containers: 
    container.findAll("a", {"class" : "Fw(b)"}) 

私は何を結果として得ることです:

[<a class="Fw(b)" data-reactid="69" data-symbol="AMAT" href="/quote/AMAT?p=AMAT">AMAT</a>] 
[<a class="Fw(b)" data-reactid="99" data-symbol="MS" href="/quote/MS?p=MS">MS</a>] 
[<a class="Fw(b)" data-reactid="129" data-symbol="NLY" href="/quote/NLY?p=NLY">NLY</a>] 
[<a class="Fw(b)" data-reactid="159" data-symbol="ODP" href="/quote/ODP?p=ODP">ODP</a>] 
[<a class="Fw(b)" data-reactid="189" data-symbol="FCAU" href="/quote/FCAU?p=FCAU">FCAU</a>] 
[<a class="Fw(b)" data-reactid="219" data-symbol="RDC" href="/quote/RDC?p=RDC">RDC</a>] 
[<a class="Fw(b)" data-reactid="249" data-symbol="ING" href="/quote/ING?p=ING">ING</a>] 
[<a class="Fw(b)" data-reactid="279" data-symbol="FTI" href="/quote/FTI?p=FTI">FTI</a>] 
[<a class="Fw(b)" data-reactid="309" data-symbol="BX" href="/quote/BX?p=BX">BX</a>] 
[<a class="Fw(b)" data-reactid="339" data-symbol="FNSR" href="/quote/FNSR?p=FNSR">FNSR</a>] 

何が取得しようとしているのはdata-symbolの属性ですが、最終的にはhrefも必要です。私はいくつかのアプローチを試みましたが、運はありません。どんな助けでも大歓迎です。

答えて

0

各コンテナのリンクをループし、必要な値を取得するだけです。 linkdictionaryなので、get()メソッドを使用しない場合は、属性名をキーとして使用して値を簡単に取得できます(link["href"]など)。
lxmlパーサーを試してみてください。html.parserよりもはるかに高速です。

import re 
from urllib.request import urlopen as uReq 
from bs4 import BeautifulSoup as soup 

my_url = "https://finance.yahoo.com/screener/predefined/undervalued_growth_stocks" 

loadpage = uReq(my_url) 
showloadpage = loadpage.read() 
loadpage.close() 

soupit = soup(showloadpage, "lxml") 

#the regex works - returns all of the "tr" tags, i.e. containers 
containers = soupit.find_all("tr", {"class" : re.compile("data-row.*")}) 

for container in containers: 
    links = container.find_all("a", {"class" : "Fw(b)"}) 
    for link in links: 
     data_symbol = link.get("data-symbol") 
     href = link.get("href") 
     print(data_symbol, href) 
+0

これは非常に意味があります。 MD Khairul Basarありがとうございました。 –

+0

@RonaldGreeff大歓迎です。 :) –

関連する問題