どん底から這い上がるまでの記録

どん底から這い上がりたいけど這い上がれない人がいろいろ書くブログ(主にプログラミング)

Requestsを使ってみた

HTTPリクエストを簡単にできるRequestsを使ってみました。

公式ページによると、pythonに標準ではいっているurllibモジュールに比べて、APIの使いやすさが半端ないそうです。

今回はRequestsを使ってWikipediaのページをダウンロードして、その中身をファイルに書き込んでみます。

 

環境

関連リンク

Documentation

urllibを使ってWikipediaの記事をダウンロードする。 - どん底から這い上がるまでの記録

BeautifulSoupを使ってWikipediaのテキストを抽出する - どん底から這い上がるまでの記録

pythonの出力文いろいろまとめてみる。 - どん底から這い上がるまでの記録

Wikipediaのページをダウンロードする

まずは必要なモジュールをインポート。

import requests

入っていない場合は、pipでインストールします。

pip install requests

モジュールをインポートしたら、リクエストを生成してウェブページを取得します。今回はWikipedia織田信長の記事をダウンロードします。

url = "https://ja.wikipedia.org/wiki/織田信長"
response = requests.get(url)

取得したいウェブページのURLをget()に渡すだけです。

変数responseはResponseオブジェクトになっていて、レスポンスのヘッダーやウェブページの中身などの情報があります。

print(response)
# <Response [200]>
print(response.status_code)
# 200
  • ヘッダーの確認

辞書形式になっています。

print(response.headers)
  • ウェブページのソースを取得
html = response.text

htmlにはHTML形式の文字列が入っています。

BeautifulSoupを使って、htmlに含まれる<p></p>で囲まれた文字列を抽出してみます。

コードにすると、下のようになります。

from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "lxml")
p_tags = soup.find_all("p")

 

p_tagsにはhtmlに含まれる<p></p>(を含む)で囲まれた文字列が入っています。

print(p_tags[0])
"""<p><b>織田 信長</b>(おだ のぶなが)は、<a href="/wiki/%E6%88%A6%E5%9B%BD%E6%99%82%E4%BB%A3_(%E6%97%A5%E6%9C%AC)" title="戦国時代 (日本)">戦国時代</a>から<a href="/wiki/%E5%AE%89%E5%9C%9F%E6%A1%83%E5%B1%B1%E6%99%82%E4%BB%A3" title="安土桃山時代">安土桃山時代</a>にかけての<a href="/wiki/%E6%AD%A6%E5%B0%86" title="武将">武将</a>・<a href="/wiki/%E6%88%A6%E5%9B%BD%E5%A4%A7%E5%90%8D" title="戦国大名">戦国大名</a>。<b><a href="/wiki/%E4%B8%89%E8%8B%B1%E5%82%91" title="三英傑">三英傑</a></b>の一人。
</p>"""

 

ここから、タグなどを取り除いて本文だけを抽出するには、.textでできます。

print(p_tags[0].text)
# '織田 信長(おだ のぶなが)は、戦国時代から安土桃山時代にかけての武将・戦国大名。三英傑の一人。\n'

 

最後に、print()を使って、<p></p>で囲まれた文字列をファイルに書き込んでみます。

import codecs
corpus = []
for p_tag in soup.find_all('p'):
    corpus.append(p_tag.text.strip())

print(*corpus, sep="\n", file=codecs.open("nobunaga.txt", 'w', 'utf-8'))

corpusというリストを用意して、その中に文字列を加えていきます。

最後に、print()を使って改行区切りで、ファイルにリストの中身を書き込んでいます。

ソースコード

import codecs
import requests
from bs4 import BeautifulSoup


url = "https://ja.wikipedia.org/wiki/織田信長"
# 指定したページの情報を取得
response = requests.get(url)
# HTMLのフォーマットに変換
html = response.text
soup = BeautifulSoup(html, "lxml")
# pタグで囲まれた部分を抽出
p_tags = soup.find_all("p")

corpus = []
for p_tag in soup.find_all('p'):
    corpus.append(p_tag.text.strip())
# テキストファイルに書き込む
print(*corpus, sep="\n", file=codecs.open("nobunaga.txt", 'w', 'utf-8'))