#7.Webエンジニア1年選手がPythonを知る:Webから取得したデータを再利用する編

今回は先回取得したHTMLデータを解析して、必要なものを抽出し
再利用するということをしてみます。

#6.Webエンジニア1年選手がPythonを知る:Webからデータを取得する編

ver :Python3.6
OS :macOS
editor :visual Studio Code

GitHub:https://github.com/shimura0714/Qiita

BeautifulSoupを使ってみる

解析といっても自前でプログラミングを用意するのではなく既に提供されているソフトを利用します。
PythonにはBeautifulSoupというスクレイピングのライブラリが有りまして、
今回はBeautifulSoupを利用します。

BeautifulSoupのインストール

インストールはコマンドひとつです。

$ pip install beautifulsoup4

これでOK!!

試す

google_get_search_ex.py
import urllib.request
import sys
from bs4 import BeautifulSoup

url = "https://www.google.co.jp/search?q={0}".format(sys.argv[1])
headers = {
        "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"
        }

request = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(request) #ここまで先回
s = BeautifulSoup(response, 'html.parser')
#s = BeautifulSoup(response, 'lxml')
#require lxml
#pip install lxml
results = s.find_all("a") #aタグ要素を検索
for result in results:
  print(result.get("href")) #href属性を表示

サンプルではリクエストで取得したデータのaタグhref属性の値を全て抽出しています。

google_s_qitta.txt
#結果を一部抜粋
/preferences?hl=ja&prev=https://www.google.co.jp/search?q%3DQitta#languages
/setprefs?safeui=on&sig=0_odJNFox_4r0_Y3axZw8nQPixcKE%3D&prev=https://www.google.co.jp/search?q%3DQitta
/advanced_search?q=Qiita&hl=ja
/history/optout?hl=ja
//support.google.com/websearch/?source=g&hl=ja
None
/search?q=Qiita&spell=1&sa=X&ved=0ahUKEwjbyram-6naAhXGxrwKHbJTAa0QkeECCCQoAA
/search?q=Qitta&nfpr=1&sa=X&ved=0ahUKEwjbyram-6naAhXGxrwKHbJTAa0QvgUIJSgB
None
None
https://qiita.com/
#
https://webcache.googleusercontent.com/search?q=cache:K_DRVHQFH7AJ:https://qiita.com/+&cd=1&hl=ja&ct=clnk&gl=jp
/search?q=related:https://qiita.com/+Qiita&tbo=1&sa=X&ved=0ahUKEwjbyram-6naAhXGxrwKHbJTAa0QHwguMAA
https://qiita.com/takeharu/items/bb154a4bc198fb102ff3
https://qiita.com/trend
https://qiita.com/items
https://qiita.com/tags/python

リクエストしたURLのHTML全体からスクレイピングするのでノイズが入り込んでしまいます。

検索結果のURLのみ取得する

google_get_search_ex.py
import urllib.request
import sys
from bs4 import BeautifulSoup

url = "https://www.google.co.jp/search?q={0}".format(sys.argv[1])
headers = {
        "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"
        }

request = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(request)
s = BeautifulSoup(response, 'lxml')
#require lxml
#pip install lxml
h3 = s.select(".r") #class='r'を取得
for result in h3:
  print(result.a.get("href")) #href属性を取得する。

実行結果

https://qiita.com/
https://qiita.com/takeharu/items/bb154a4bc198fb102ff3
https://qiita.com/trend
https://qiita.com/items
https://qiita.com/login?redirect_to=%2Fterms
https://ferret-plus.com/1856
https://twitter.com/qiita
https://ja.wikipedia.org/wiki/Qiita
https://www.sbbit.jp/article/cont1/32877
http://techblog.kayac.com/qiita-iine-challenge

検索結果のDOMをCSSセレクタで取得して
aタグhref属性を取得します。
これでノイズの無い検索結果が取得できました。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.