2016-09-24 13 views
-3

私はこのチュートリアルがなぜ動作しないのか、オンラインチュートリアルPython Web Scraping Tutorial 5 (Network Requests)と同じコードであると考えています。私はコードをオンラインのPythonインタプリタでも実行しようとしました。regexを使用したWebスクレイピング

import urllib 
import re 

htmltext = urllib.urlopen("https://www.google.com/finance?q=AAPL") 

regex = '<span id="ref_[^.]*_l">(.+?)</span>' 
pattern = re.compile(regex) 
results = re.findall(pattern,htmltext) 
results 

私が取得:

re.pyc in findall(pattern, string, flags) 
175 
176  Empty matches are included in the result.""" 
--> 177  return _compile(pattern, flags).findall(string) 
178 
179 if sys.hexversion >= 0x02020000: 

TypeError: expected string or buffer 

期待される結果(S):

112.71 

ヘルプは感謝を。私はURLで "read()"を使ってみましたが、うまくいきませんでした。ドキュメンテーションによると、空の結果も含める必要があります。ありがとう

+0

を最後の配列要素を取得するために作ります<\/span> ' – ZdaR

+4

使用しているチュートリアルでは、正規表現を使用してウェブを傷つけることを示唆している場合は、正規表現パターンで正しいパターンが'別のものを見つける。 HTMLパーサーは理由のために存在します。 – jonrsharpe

+0

@ZdaRいいえ... '/'は正規表現でエスケープする必要はありません... –

答えて

0

問題は、あなたが実際に要求からHTMLを読んでいないということです。

htmltext = urllib.urlopen("https://www.google.com/finance?q=AAPL").read() 
+0

うーん... OPは言った*私はURLに "read()"を使ってみましたが、それは動作しませんでした* ... –

+1

まあ彼らはそのコードを表示する必要があります。これは私のために働く。 'urllib.urlopen'はPython 3には存在しないので、これは間違いなくPython 2です。 –

+0

右のように、エラーは出ませんが、代わりに空の結果です...パターンページ内で数回発生します。 – Smolo

0

あなたは最後までチュートリアルに従っている場合:):

% python2                          
>>> import urllib 
>>> data = urllib.urlopen('https://www.google.com/finance/getprices?q=AAPL&x=NASD&i=10&p=25m&f=c&auto=1').read() 
>>> print data.split()[-1] 
112.71 

ウェブに正規表現を使用することはありませんが

をこすり、私はエラーがあり改善が単純

+0

Gillesに感謝しますが、それはあなたが開いている別のURLです。私は最後までチュートリアルに従いましたが、なぜ同じコードが異なる人/環境で異なるのか理解していません。私はthoを感謝します! – Smolo

+0

チュートリアルの最後に使用されるURLです –