Google検索のURLリスト化プログラム
Google検索で検索結果のURLリストを生成するプログラム。完全丸パクり。m(__)m
動くかどうか試させていただきました。
実行環境
Androidスマホ
termux
Python3.7
写経元は
【Python】Googleの検索結果をアクセス制限なしで取得する
urllib、requests、beautifulsoup4モジュールをインストールして動かす。
pip install urllib requests beautifulsoup4
urllib で検索するとインストールできないというページが上位に表示された。その場合はcryptoを先にインストールする等で対処できるらしいけど詳しい事は分からない。
import json from urllib import parse import requests from bs4 import BeautifulSoup class Google: def __init__(self): self.GOOGLE_SEARCH_URL = 'https://www.google.co.jp/search' self.session = requests.session() self.session.headers.update({ 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0'}) def Search(self, keyword, type='text', maximum=100): '''Google検索''' print('Google', type.capitalize(), 'Search :', keyword) result, total = [], 0 query = self.query_gen(keyword, type) while True: # 検索 html = self.session.get(next(query)).text links = self.get_links(html, type) # 検索結果の追加 if not len(links): print('-> No more links') break elif len(links) > maximum - total: result += links[:maximum - total] break else: result += links total += len(links) print('-> Finally got', str(len(result)), 'links') return result def query_gen(self, keyword, type): '''検索クエリジェネレータ''' page = 0 while True: if type == 'text': params = parse.urlencode({ 'q': keyword, 'num': '100', 'filter': '0', 'start': str(page * 100)}) elif type == 'image': params = parse.urlencode({ 'q': keyword, 'tbm': 'isch', 'filter': '0', 'ijn': str(page)}) yield self.GOOGLE_SEARCH_URL + '?' + params page += 1 def get_links(self, html, type): '''リンク取得''' soup = BeautifulSoup(html, 'lxml') if type == 'text': elements = soup.select('.rc > .r > a') links = [e['href'] for e in elements] elif type == 'image': elements = soup.select('.rg_meta.notranslate') jsons = [json.loads(e.get_text()) for e in elements] links = [js['ou'] for js in jsons] return links
実行
写経元コメント
「ドラえもん」の検索結果が200件ほしいなら、こんな感じで使います。resultにはurlのリストが渡ります。
検索内容を個人的関心事に書き換えた。
google = Google() # テキスト検索 result = google.Search('JavaScriptの変数をPythonに渡す方法', type='text', maximum=200) # 画像検索 result = google.Search('ドラえもん', type='image', maximum=200)
print(result)
これをtermuxで実行中にlxmlモジュールがないぞと言われました。
素直にインストールできない場合はこちらを参考に。
【termux】lxmlモジュールのインストール方法覚え書き - よちよちpython