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