2016-12-29 4 views
0

私はPythonのWeb解析に関するチュートリアルを見ていました。ライブストックデータを取得するコードです。コードは正常に動作します。Python、Web Parsing

import re 
    import urllib.request 

    # https://www.google.com/finance?q= 
    url = "https://www.google.com/finance?q=" 
    stock = input("Enter Your Stock : ") 
    url = url + stock 
    data = urllib.request.urlopen(url).read() 
    newData = data.decode('utf-8') 
    # meta itemprop="price" 
    m = re.search('meta itemprop="price"', newData) 
    start = m.start() 
    end = start + 50 
    newStock = newData[start:end] 
    m = re.search('content="', newStock) 
    start = m.end() 
    newStock1 = newStock[start:] 
    m = re.search('/', newStock1) 
    start = 0 
    end = m.end() - 3 
    final = newStock1[0:end] 
    print("The Value Of " + stock + " Is " + final) 

しかし、私はコードでこれらの二つの部分を理解していけない:

start = m.start() 
    end = start + 50 # Why + 50 ? 

    start = 0 
    end = m.end() - 3 # Why - 3 ? 

を誰も私に説明を与えることはできますか?だから最初の質問

+0

このチュートリアルはどこにありますか? – Dmitry

+0

実際にはコースの一部です –

+1

有効在庫をご提供ください。 – ppasler

答えて

0

を詳しく説明してください:

newData = data.decode('utf-8') 
# meta itemprop="price" 
m = re.search('meta itemprop="price"', newData) 
start = m.start() 
end = start + 50 
newStock = newData[start:end] 

ライン:+50がある理由を簡単に理解するために

start = m.start() 
end = start + 50 # Why + 50? 

を、あなたは後に先にビットとビットを調べる必要がありライン別:

  • newDataはクロールページ(FOのUTF-8表現が含まれています私たちがAppleの株価を取得しようとしている場合は、例https://www.google.com/finance?q=aapl)。

  • mマッチオブジェクトである:それは他の情報の束+終了meta itemprop="price"開始のnewDataに発生(詳細については、ドキュメントをチェックアウト:python2python3)を

  • startれます一致が始まるnewDataの位置

  • (開始+50)これは、価格を含むHTML要素の想定最大長であるためです。例えばAppleを見ると、長さが42文字の <meta itemprop="price" content="116.73" />です。

  • newStockは今meta itemprop="price" content="116.73" />

は、ここから2番目の質問に継続されます。前の例と同様に

start = 0 
end = m.end() - 3 # Why - 3 ? 

、のはもう少しコンテキストを取得してみましょう:

newStock = newData[start:end] 
m = re.search('content="', newStock) 
start = m.end() 
newStock1 = newStock[start:] 
m = re.search('/', newStock1) 
start = 0 
end = m.end() - 3 
final = newStock1[0:end] 

行ごと:

01など newStockcontent="開始の発生は、終了:
  • は、我々はすでにnewStockが今meta itemprop="price" content="116.73" />

  • mは、新しい正規表現の一致対象であるだろうと述べました

  • start一致

  • newStock1は次にcontent="後の最初の文字で始まり、文字列の末尾で終了newStockのサブストリングであるのでnewStock1116.73" />

  • であります
  • ...最後の正規表現!

  • start0が割り当てられているが、実際に/文字までもう

  • end我々は数(株式の価値)の端からちょうど3つの文字があることを知っているのでm.end() - 3で使用されていません(文字を含む):",および/

これが役立ちます。

+0

それは私を助けてくれました。ありがとう。感謝しています –