2017-06-28 16 views
0

私は特定の時間枠の間の資産のためのヤフー・ファイナンスからの履歴データをダウンロードするためのリンクのURLを取得しようとしているが欠落しています。 1999年1月1日から現在まで。BeautifulSoup HTML

だから私はここに行けば、たとえば:

"https://query1.finance.yahoo.com/v7/finance/download/XLB?period1=915177600&period2=1498633200&interval=1d&events=history&crumb=iX6bJ6LfGxc" 

私が使用している: https://finance.yahoo.com/quote/XLB/history?period1=915177600&period2=1498633200&interval=1d&filter=history&frequency=1d

私はこの(データのテーブル上の「データのダウンロード」のリンクから)を取得したいと思いますBeautifulSoupとhtmlをhtmlで表示されない保持する必要なタグの問題に実行されています。最初は、find_all( 'a')を使用しようとしても結果が得られず、BeautifulSoupが正しく動作していないと思っていました。しかし、私がHTMLのテキストダンプをしたとき、html要素(親要素内の他のものと一緒に)はそこにはありませんでした。 誰かが何が起こっているのか説明できますか?私が現在取り組んでいることは以下の通りです。

from bs4 import BeautifulSoup 
import datetime as dTime 
import requests 

""" 
asset = "Materials" 
assetSignal = "XLB" 
today = dTime.datetime.now() 
startTime = str(int(dTime.datetime(1999, 1, 1, 0, 0, 0).timestamp())) 
endTime = str(int(dTime.datetime(today.year, today.month, today.day, 0, 0, 0).timestamp())) 
url = "https://finance.yahoo.com/quote/" + assetSignal + "/history?period1=" + startTime + "&period2=" + endTime + "&interval=1d&filter=history&frequency=1d" 
""" 

url = "https://finance.yahoo.com/quote/XLB/history?period1=915177600&period2=1498633200&interval=1d&filter=history&frequency=1d" 
page = requests.get(url) 
data = page.content 
#soup = BeautifulSoup(data, "html.parser") 
soup = BeautifulSoup(data, "lxml") 
#soup = BeautifulSoup(data, "xml") 
#soup = BeautifulSoup(data, "html5lib") 

#Link not found 
for link in soup.find_all("a"): 
    print(link.get("href")) 

#Span is empty? 
span = soup.find(class_="Fl(end) Pos(r) T(-6px)") 
print(span) 
print(span.string) 
print(span.contents) 
for child in span.children: 
    print(child) 

#Other span has children. Target span doesn't 
div = soup.find(class_="C($finDarkGray) Mt(20px) Mb(15px)") 
print(div) 
for child in div.descendants: 
    print(child) 

#Is the tag even there? 
with open("soup.txt", "w") as file: 
    file.write(page.text) 
+0

このコードは実行されますか?原因 'URL = httpsを:?//finance.yahoo.com/quote/XLB/history周期1 = 915177600&周期2 = 1498633200&インターバル= 1D&フィルタ=歴史&周波数= 1d'は私に怪しい見えます。 – patrick

+0

コードは機能しますが、そのURLを引用符で囲みますが、実際にダウンロードリンクはスープの結果では利用できません。リンクがjavascriptのようで、BeautifulSoupはJavascriptを実行しないため、JSを介して配信またはレンダリングされるデータは、BeautifulSoupでスクラップした場合には使用できません。セレンやファントムを調べる必要があるかもしれません – davedwards

答えて

0

このウェブサイトは、Javascriptに大きく依存しています。あなたのブラウザに表示される多くの情報は、あなたがウェブサイトへの最初のリクエストには含まれませんが、その後のリクエストではJavascriptによって追加されます。

ではなく、彼らのAPIを使用するか、Webブラウザをエミュレートセレンのようなものを使用してみてください。

+0

Yahoo Finance APIは不具合であることが判明しましたが、Seleniumは機能しました。ありがとうございました。 –