やること
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
解説
- Parserクラス内の開始HTMLタグを検出するhandle_starttagメソッドで記事のリンクとタイトルの要素があるh2タグを検出しその中のaタグのリンクを記事のリストに追加する
- Parserクラス内のタグ内データを検出するhandle_dataメソッドで記事のタイトルを検出し記事のリストに追加する
- main関数で記事リストのデータの出力