環境は
python3.7
jupyter notebook
windows10
になります。
from future import print_function
from bs4 import BeautifulSoup
from urllib import parse
import os
import json
import requests
SearchName = ["A","B","C","D"]
ImgNumber =100
ImgSize=(128,128)
input_shape=(128,128,3)
os.makedirs("./Original", exist_ok=True)
os.makedirs("./Face", exist_ok=True)
os.makedirs("./FaceEdited", exist_ok=True)
os.makedirs("./test", exist_ok=True)
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=1000): '''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('-> 結果', 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
google = Google()
for name in SearchName:
ImgURLs = google.Search(name, type='image', maximum=ImgNumber) os.makedirs("./Original/"+str(name), exist_ok=True) for i,target in enumerate(ImgURLs): try: re = requests.get(target, allow_redirects=False) with open("./Original/"+str(name)+'/' + str(i)+'.jpg', 'wb') as f: f.write(re.content) except requests.exceptions.ConnectionError: continue except UnicodeEncodeError: continue except UnicodeError: continue except IsADirectoryError: continue
print("保存完了しました")
スクレイピングを行うためにこちらのコードを実行したところ、実行には成功するのですが、リンクが得られず画像を保存することが出来ません。
何故なのか教えていただけませんか。以下が試行結果になります。
Google Image Search : A
-> No more links
-> 結果 0 のlinksを取得しました
Google Image Search : B
-> No more links
-> 結果 0 のlinksを取得しました
Google Image Search : C
-> No more links
-> 結果 0 のlinksを取得しました
Google Image Search : D
-> No more links
-> 結果 0 のlinksを取得しました
保存完了しました
あなたの回答
tips
プレビュー