2017-07-31 6 views
0

私は、このページからメインテーブルからデータを取得しようとしていますと、超シンプルなスクレイピング: https://www.interactivebrokers.com/en/index.php?f=2222&exch=globex&showcategories=FUTGRP#productbufferパイソン - 要求とBS4

私が試した:

import requests 
from bs4 import BeautifulSoup 

address="https://www.interactivebrokers.com/en/index.php?f=2222&exch=globex&showcategories=FUTGRP#productbuffer" 

r=requests.get(address) 
soup=(r.text,"html_parser") 

は、私が知っている、これは超基本であるが、どういうわけか私はここでブロックされています。

私はsoup.find_all('table')を試しましたが、私が探しているテーブルを正しく識別できませんでした(IDまたは識別可能な属性がないようです)。

私はsoup.find_all('tr')を試しましたが、私は探している行を見ることができますが、分離する方法がわからない結果にいくつかの望ましくない行があります。

誰もがbs4で私の最初のステップを助けることができますか?

+2

必要な表と取得する行を指定します。 –

+0

または私達は推測できる.... –

+0

私はヘッダー "IBシンボル、製品の説明、シンボル、通貨"とテーブルを探しています。私はあなたがsoup = BeautifulSoup(r.text、 "html.parser")... –

答えて

1

あなたが実際にテーブルタグの外にあるtbodyタグ内にあるデータが問題になるようです。このサイトには3つのサイトがあります。 TDSをつかむためにだから、作業コード

は次のようになります。

import requests 
from bs4 import BeautifulSoup 

url = 'https://www.interactivebrokers.com/en/index.php?f=2222&exch=globex&showcategories=FUTGRP#productbuffer' 
response = requests.get(url) 
soup = BeautifulSoup(response.text, "html.parser") 
table = soup.find_all('tbody')[2] 
trs = table.find_all('tr') 

を次に、あなたはちょうどあなたが後にしている、コンテンツを取得するためにTRSを反復しなければなりません。 tdsは4つの要素を持つリストにあります。あなたはnrの後です。 0,2,3です。通常、あなたはそれに行くことができます。 nr1は同じリンクテキスト( 'linkexternal')を持っているので、代わりにそれを行った。

outfile = r'C:\output_file.txt' 
with open(outfile, 'a', encoding='utf-8') as fd: 
    for tr in trs: 
     try: 
      tds = tr.find_all('td') 
      print_elements = ",".join([td.text for td in tds if 'linkexternal' not in str(td)]) 
      fd.write(print_elements+'\n') 
     except: 
      #some exception handling, perhaps logging 
      pass 
関連する問題