ウェブ・スクレイピング

2020年7月31日

はじめに

Python を使ってウェブから情報を取る。

環境

  • Anaconda3 (Python 3.7)

ウェブから情報を取得する

情報の取得に requests、情報の抽出に BeautifulSoup を用いる。

import requests
from bs4 import BeautifulSoup

url = "http://penguinitis.g1.xrea.com"

response = requests.get(url)

soup = BeautifulSoup(response.text, "html.parser")

for item in soup.find_all("a"):
    print(item)

ここではアンカーのみ表示している。

とりあえず取る

print(soup.prettify())

とりあえず取ってみて、データを観察して方針を決める。

リンクを取る

たとえば、td 要素の "link" クラスの中にアンカーがあって、それから href の値を取り出したい場合は、以下のようになる。

href = []
for item in soup.find_all("td", class_="link"):
    anchor = item.select("a")
    if anchor != []:
    href.append(anchor[0].attrs["href"])

PDF の取得

response = requests.get(url)

with open("file.pdf", "wb") as f:
    f.write(response.content)

更新日時の取得

response = requests.head(url)
s = response.headers["Last-Modified"]

Windows 認証

Windows 認証 (NTLM 認証) が必要なサイトに接続するには、requests_ntlm を用いる。

$ pip install requests_ntlm
import requests
from bs4 import BeautifulSoup
from requests_ntlm import HttpNtlmAuth

url = "http://xxxx"
username = "xxxx"
password = "xxxx"

response = requests.get(url, auth=HttpNtlmAuth(username, password))

soup = BeautifulSoup(response.text, "html.parser")

...