pythonでGoogle検索の結果をbeautifulsoupでスクレイピングして、
タイトルとURLのセットを取得して表示させてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import requests import bs4 # キーワードを使って検索してhtmlを取得する keyword = 'python' response = requests.get('https://www.google.co.jp/search?q=' + keyword) # ステータスコードが200以外なら例外を発生させる response.raise_for_status() # 取得したHTMLをパースする bs = bs4.BeautifulSoup(response.text, "html.parser") # 検索結果のタイトルとリンクを取得 element = bs.select('.r > a') title_list = [] url_list = [] for i in range(len(element)): # タイトルのテキスト部分のみ取得 title = element[i].get_text() # リンクのみを取得し、余分な部分を削除する url = element[i].get('href').replace('/url?q=','') title_list.append(title) url_list.append(url) # 出力 for i in range(len(title_list)): print(title_list[i]) print('['+ url_list[i] +']') print('') |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Welcome to Python.org [https://www.python.org/&sa=U&ved=0ahUKEwjFrcXw1bjfAhUS0lQKHdHNAVUQFggUMAA&usg=AOvVaw1-NvLH6Tv0rGldN36ibIt4] Python - ウィキペディア [https://ja.wikipedia.org/wiki/Python&sa=U&ved=0ahUKEwjFrcXw1bjfAhUS0lQKHdHNAVUQFggfMAE&usg=AOvVaw3jLHvUDBY5ke7FmiuKTMrN] プログラミング言語 Python [https://www.python.jp/&sa=U&ved=0ahUKEwjFrcXw1bjfAhUS0lQKHdHNAVUQFggqMAI&usg=AOvVaw06P95T7nZTSygJ2-EpDffd] Python チュートリアル — Python 3.6.5 ドキュメント [https://docs.python.jp/3/tutorial/&sa=U&ved=0ahUKEwjFrcXw1bjfAhUS0lQKHdHNAVUQFggwMAM&usg=AOvVaw2Bttil2dSmCfYeWcmif2bl] Python - Qiita [https://qiita.com/tags/python&sa=U&ved=0ahUKEwjFrcXw1bjfAhUS0lQKHdHNAVUQFgg1MAQ&usg=AOvVaw3L-sup0JFT78vblWvgBcfG] Python本まとめ・2019年版 - Webとデータ分析を初心者が仕事にするまで [https://shinyorke.hatenablog.com/entry/python2019&sa=U&ved=0ahUKEwjFrcXw1bjfAhUS0lQKHdHNAVUQFgg6MAU&usg=AOvVaw1ELsMxxkPoVJG0uOdGmjE6] 今さら聞けない!Pythonとは【初心者向け】 | TechAcademyマガジン [https://techacademy.jp/magazine/15507&sa=U&ved=0ahUKEwjFrcXw1bjfAhUS0lQKHdHNAVUQFghAMAY&usg=AOvVaw0fVmLNJwwaIVhocz5YDYJF] なぜPythonはこんなにも遅いのか? | POSTD [https://postd.cc/why-is-python-so-slow/&sa=U&ved=0ahUKEwjFrcXw1bjfAhUS0lQKHdHNAVUQFghGMAc&usg=AOvVaw1eLP-ojZgYvvWiP6fAViJ-] 専門知識いらず!Pythonとは何かを言語の特徴から網羅的に徹底解説 ... [https://www.sejuku.net/blog/7720&sa=U&ved=0ahUKEwjFrcXw1bjfAhUS0lQKHdHNAVUQFghMMAg&usg=AOvVaw27dx8bUci7ExM5SqwkjRp6] Python入門 〜Pythonのインストール方法やPythonを使った ... [https://www.javadrive.jp/python/&sa=U&ved=0ahUKEwjFrcXw1bjfAhUS0lQKHdHNAVUQFghSMAk&usg=AOvVaw3GNgQCLVXaUgkQNGN3jHhT] |
解説
下記は、class=’r’を使っているタグの内側で使われているaタグで囲まれている内容を取ります。
1 |
element = bs.select('.r > a') |
element[0]の中身の例
1 |
<a href="/url?q=https://www.python.org/&sa=U&ved=0ahUKEwj9nfff17jfAhUICjQIHXerBOkQFggUMAA&usg=AOvVaw2S32M1LB2og9X0Ed6Q3cu1">Welcome to <b>Python</b>.org</a> |
そして下記でタグを除去してタイトルのテキスト部分のみを取得できます。
1 |
title = element[i].get_text() |
urlの取得は、get()でhrefの属性のデータを取るように指定して、余計な文字を除去しています。
1 |
url = element[i].get('href').replace('/url?q=','') |
これでタイトルとURLが取得できました
参考
PythonのrequestsとBeautifulSoupでGoogle検索結果から、タイトルとURLと説明文だけを抜き取る