Help us understand the problem. What is going on with this article?

[Python3] HTMLParserによるウェブスクレイピング実践入門

More than 3 years have passed since last update.

やること

Googleニュースの記事リストのタイトルとそのリンクを抽出する.  

環境

言語

  • Python3

ライブラリ

  • requests
  • HTMLParser

ライブラリのインストール

HTMLParserは標準モジュールなので追加インストールはありません.

setup.sh
pip install requests

実践

get_news.py
# -*- coding: utf-8 -*-


import requests
from html.parser import HTMLParser


class Parser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.title = False
        self.link = False
        self.data = []

    def handle_starttag(self, tag, attrs):
        attrs = dict(attrs)
        if tag == "h2" and "class" in attrs and attrs['class'] == "esc-lead-article-title":
            self.data.append({})
            self.title = True
            self.link = True

        if tag == "a" and self.link == True:
            self.data[-1].update({"link": attrs["href"]})

    def handle_data(self, data):
        if self.title == True or self.link == True:
            self.data[-1].update({"title": data})
            self.title = False
            self.link = False


def main():
    payload = {"topic" : "t"}
    r = requests.get('https://news.google.com/news/section', params=payload)
    parser = Parser()
    parser.feed(r.text)
    parser.close()

    for i in parser.data:
        print("Title: " + i["title"], "\nLink: " + i["link"] + "\n")


if __name__ == '__main__':
    main()

これを実行すると以下の結果が返ってくる.   
Googleのテクノロジートピックにアクセスし,20件のニュース記事を引っ張る.

$ python3 main.py
Title: いつの間にかiPhoneの画面が点いている? という現象を防ぐには 
Link: http://news.livedoor.com/article/detail/13218777/

Title: ランサムウェアに影響されない安全なOSとは? 
Link: http://gigazine.net/news/20170617-microsoft-ransomware-against-windows-10-s/

Title: 「Appleは自動運転システムに注力している」ティム・クックCEO、開発を認める 
Link: http://www.gizmodo.jp/2017/06/tim-cook-accepts-developing-selfdriving-car.html

Title: イーロン・マスクが描く「火星移住」計画 100万人規模を視野に 
Link: https://forbesjapan.com/articles/detail/16633

Title: リチャード・ハモンドが350km/hオーバーで事故を起こしたEVスーパーカー「リマック コンセプト_ワン」とは、こんなクルマだ! 
Link: http://jp.autoblog.com/2017/06/18/rimac-concept-one/

Title: 「E3」で発表されたゲーミングギアまとめ。最先端技術からレトロなものまで 
Link: http://top.tsite.jp/news/technology/o/35933635/?sc_int=tcore_news_recent

Title: Galaxy Note 8のパネルとされる画像がリークされる!S8と変化なし? 
Link: http://iphone-mania.jp/news-172076/

Title: 【噂】iPhone 8のディスプレイサイズが判明か? 
Link: http://www.appps.jp/266777/

Title: MacBook Proユーザーの私が、任天堂スイッチに救われた話 
Link: http://japanese.engadget.com/2017/06/16/macbook-pro/

Title: 「Pixel」シリーズ、出荷台数はようやく100万台を突破か 
Link: http://ggsoku.com/2017/06/app-install-number-on-play-store-implies-the-actual-shipment-number-of-pixel-series/

Title: 目指すは「一家に一台」 SIEJA盛田厚プレジデントにインタビュー 
Link: https://mainichi.jp/articles/20170617/dyo/00m/200/028000c

Title: Windows 10 IP ビルド16215で、Edgeブラウザーが大幅に強化された 
Link: http://ascii.jp/elem/000/001/501/1501468/

Title: GIF・30周年、いまもネットを動かし続けるその「誕生秘話」 
Link: http://news.livedoor.com/article/detail/13211939/

Title: Windowsの不要になった回復パーティションを削除する【作業編その2】 
Link: http://ascii.jp/elem/000/001/501/1501374/

Title: マイクロソフトXbox責任者、Xbox One XのVR対応への展望を語る 
Link: http://getnews.jp/archives/1789465

Title: 伸びる腕を持つ個性豊かな「ファイター」を操れ! Nintendo Switch向けアクション「ARMS」 
Link: https://www.j-cast.com/trend/2017/06/18300351.html

Title: iPhone 8、やはり「ディスプレイ一体型指紋認証センサー」を実装か 
Link: http://ggsoku.com/2017/06/new-leaked-slide-implies-touch-id-of-iphone-8-would-be-integrated-under-the-display/

Title: iOS 11で音声通話アプリの音質がよくなるってホント? - いまさら聞けないiPhoneのなぜ 
Link: http://top.tsite.jp/news/news/o/35933598/?sc_int=tcore_news_recent

Title: OnePlus、「OnePlus 5」の撮影サンプルを公開 
Link: http://ggsoku.com/2017/06/oneplus-ceo-officially-reveals-camera-samples-of-oneplus-5/

Title: メモを残すだけじゃない iPhone「メモ」アプリの使い方 
Link: http://www.itmedia.co.jp/mobile/articles/1706/18/news014.html

解説

  1. Parserクラス内の開始HTMLタグを検出するhandle_starttagメソッドで記事のリンクとタイトルの要素があるh2タグを検出しその中のaタグのリンクを記事のリストに追加する
  2. Parserクラス内のタグ内データを検出するhandle_dataメソッドで記事のタイトルを検出し記事のリストに追加する
  3. main関数で記事リストのデータの出力

参考文献

Taillook
mixi
全ての人に心地よいつながりを
http://mixi.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした