2017-09-06 14 views
-2

次のコードは空のリストを出力します。私はそれが株価を印刷することを期待する。どんな助けもありがとう。ありがとう!PythonのWebスクラブ

import urllib.request 
import re 
companyList = ["aapl","goog","nflx"] 
for i in range(len(companyList)): 

    url = "https://finance.yahoo.com/quote/"+companyList[i]+"?p="+companyList[i] 
    htmlfile = urllib.request.urlopen(url) 
    htmltext = htmlfile.read() 
    regex = '<span class="Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)" data-reactid="35"><!-- react-text: 36 -->()(.+?)<!-- /react-text --></span>' 
    pattern = re.compile(regex) 
    price = re.findall(pattern, str(htmltext)) 
    print(price) 
+1

私は、特に新規参入者のために、複数のダウン投票のポイントを見ません。おそらく、そのページから抽出しようとしていることを教えてくれるかもしれません。一方、私はあなたがBeautifulSoup、または正規表現よりもWebページを扱う他の手段の1つを使うほうがよいとお勧めします。そのアプローチには困難が伴う。 –

+0

私にコメントを送る場合は、「@」記号を入力してメニューを表示し、リストから自分の名前を選択します。 –

+0

正規表現でHTMLを解析しないでください。この有名な(または悪名高い)質問と回答は、詳細をご覧ください:https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – cddt

答えて

0

私はいずれかの企業でそれを行います。しかし、私はあなたの会社が、私があなたにそれをする方法を示したことを誰にも言わないことを約束します。

ページのHTMLのコピーを取得し、ローカルに保存します。

>>> import urllib.request 
>>> import re 
>>> url = 'https://finance.yahoo.com/quote/AAPL/?p=AAPL' 
>>> htmlfile = urllib.request.urlopen(url) 
>>> htmltext = htmlfile.read() 
>>> open('temp.htm', 'w').write(str(htmltext)) 
533900 

は、ページを調べ、そしてあなたはこれと同様のページで確認できるようにしたい項目をコピー、貼り付けます。参照のためにコメントに入れてください。

>>> # <span class="Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)" data-reactid="35"><!-- react-text: 36 -->161.38< 

たとえば、expという変数に保存します。

>>> exp = '<span class="Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)" data-reactid="35"><!-- react-text: 36 -->161.38<' 

文字列に複数の空白文字がないことを確認します。その後、存在する場合は、\ sの+

>>> exp.find(' ') 
-1 

プレフィックスを持つ単一の「\」文字ではRegexにとって重要な文字列内の各文字を空白の全体の文字列に置き換えます。

>>> re.sub(r'[().]', lambda m: '\\'+m.group(), exp) 
'<span class="Trsdu\\(0\\.3s\\) Fw\\(b\\) Fz\\(36px\\) Mb\\(-4px\\) D\\(ib\\)" data-reactid="35"><!-- react-text: 36 -->161\\.38<' 

結果を表示して調べます。

>>> regex = '<span class="Trsdu\\(0\\.3s\\) Fw\\(b\\) Fz\\(36px\\) Mb\\(-4px\\) D\\(ib\\)" data-reactid="35"><!-- react-text: 36 -->([^<]+)<' 

ターゲットアイテムを探すために正規表現を使用してください。

>>> re.findall(regex, str(htmltext)) 
['161.38'] 
+0

あなたは私の言葉を持っています。助けてくれてありがとう。 :D –

0

以下のスクリプトが役立つかどうかを確認してください。これには、認証も含まれます。

https://github.com/PraveenKandregula/JenkinsRSSScrappingWithPython/blob/master/JenkinsRSSScrappingWithPython.py 
関連する問題