WEB SCRAPING-[PYTHON]Webスクリプトメソッド(リクエスト/美化グループ)をまとめ、実践


Webデータが必要

  • のデータを分析するには、まず資料を収集してから分析する必要があります.
  • はすべての資料を手記に作成できないため、ページから資料をロードするWeb scriptingメソッドが必要である.
  • Webスクリプトとスクロール


    1.Web scraping(WEB SCRAPING):Webページの必要な部分の情報を取得する方法.
    pythonのリクエストとbemiulsgroupパッケージで行えます.
    2.Webスクロール(WEB CRAWLING):その名の通り、Webページをあちこち這うことで自動的に情報を取得する方法です.
    pythonのseleniumパッケージで行えます.

    動的および静的スクロール


    1.動的スクロール:ページ内でclick、enterなどを介して移動を継続し、各種情報を取得する.
    2.静的スクロール:Webページ内で特別な動作を必要とせず、必要な情報の一部を把握します.Web scriptingは、この静的スクロールに相当します.

    Python webキャプチャの準備


    1. requests package


    python環境でrequist libarryでWEB PAGEのコンテンツを要求するとSERVERからRESPONSEオブジェクトが受信されます.
    import requests
    from bs4 import BeautifulSoup
    
    url = 'https://www.google.com/'
    resp = requests.get(url)
    
    print(resp)
    print(type(resp))
    
    # response 객체를 text로 출력하는 방법 - 지저분하고 data가 많아 주석처리
    # print(resp.text) 
    [output]
    
    <Response [200]>
    <class 'requests.models.Response'>
    ①getメソッドでgoogle.comのウェブページ情報を要求します
    ②対応する応答オブジェクトを応答変数に入れて印刷出力する
    ③ページロード時には、成功を示す応答コード200が返される.
    ④応答のタイプは、要求に応じて返される応答オブジェクトタイプである.
    ⑤ .応答オブジェクトの内容はtextでtextとして表示できます.ただし、データが多すぎて出力が乱れているため、出力は省略します.
    リクエストにはgetやpostなど様々な方法がありますが、いずれもWeb scrapingのコンテンツに使用されるため、getのみに対して処理されます.

    2. beautiful soup package


    BeautifulSoupは、上述した応答対象のコンテンツをより美しくインタフェースとすることができるパッケージである.
    import requests
    from bs4 import BeautifulSoup
    
    url = 'https://www.google.com/'
    
    resp = requests.get(url)
    soup = BeautifulSoup(resp.content, 'html.parser')
    
    print(soup)
    ①応答対象を含むrespの内容を目指し、Beautiful Soupパッケージhtmlを使用します.解析器でグループ化します.html.解析器はPythonのデフォルトの解析器で、lxmlなどの他のパッケージを個別にインストールして使用することができます.
    ②Jupyter Notebook、Collab環境で回ればわかりますが、より整然とした感覚で情報を確認できます.

    3.必要な情報位置を特定する


    まず、Webブラウザの開発者ツールでコンテンツを抽出する場所を特定します.
    必要な情報を抽出する場所で、右クリック>チェックまたはF 12で開発者ツールをアクティブにします.

  • マウス右クリック>チェックを行うと、TAG、CLASS、ID情報の位置を特定できます.
  • F 12ボタンは、開発者ツールを実行することもできます.
    左上隅のinspectionアイコンをクリックするか、ctrl+shift+cを押して目的の位置にマウスを移動すると、対応するtagの位置が表示されます.
  • findを使用してコンテンツを抽出する

    r1 = soup.find('strong')
    r = soup.find_all('strong')
    
    print(type(r1))
    print(type(r))
    [out put]
    <class 'bs4.element.Tag'>
    <class 'bs4.element.ResultSet'>
    find():最初に出力される要素.Tagタイプに戻る
    find all():対応する完全な要素ResultSetタイプに戻る

    1.tagを使用してデータを検索


    url = 'https://www.naver.com/'
    resp = requests.get(url)
    soup = BeautifulSoup(resp.text, 'html.parser')
    r = soup.find_all('strong')
    print(r)

    Googleホームの情報が少ないので、URLをnaverに変換して欲しい文を取得します.
    「strong」タグを持つすべての要素をfind all()で出力しようとします.多くのstrong tagとそのサブノードが出力されていることがわかります.出力されたデータが多すぎて使用できないため、必要なデータを取得するには、別の親ノードまたは子ノードを見つけて、新しいタグとして検証するか、属性として検索する必要があります.

    2.tagと属性を使用してデータを検索する


    # strong tag에 class="title"인 속성을 더해서 좀 더 데이터를 추려낸다.
    r = soup.find_all('strong', attrs = {'class':'title'})

    検索するclass='titleプロパティを抽出すると、titleのclassが戻ってくるのは、より詳細な点だけです.
    結果のデータ型はですが、下品で雑然とした文字だけを見たい場合は.textメソッドを使用できます.
    (ただし、textはelement.tagタイプに適用される方法であるため、find()結果にのみ適用される.したがって,全コンテンツを返すfind all()の結果値はfor構文で展開して適用できる.

    3.get textでテキストを抽出する

    r = soup.find_all('strong', class_ = 'title')
    # print(r)
    for i in r:
        print(i.text)

    .textを使用して各要素が持つコンテンツを出力すると、それらの配列が非常に簡潔で読み取り可能であることがわかります.このデータと同じ位置のデータを比較分析する場合、listにこのように出力して行うことができる.
    find()の後、兄弟ノードを往復するnext兄弟姉妹やprevery兄弟姉妹などが後続の練習で行われる.