Googleのインライン画像をスクラップ
13606 ワード
内容:イントロ、インポート、何がスクラップ、プロセス、コード、リンク、outro.
このブログのポストは、GoogleのWebスクレーピングシリーズの継続です.ここでは、Pythonを使用してインライン画像をscrapeする方法が表示されます
注:このブログ記事は、あなたがよく知っていると仮定します
コンテナ、リンクを選択し、写真が使用されています.
サムネイルの抽出
サムネイルを抽出するには
ソースコードをオープンしたら
サムネイルを抽出するには
このトピックについての詳細はDeveloper Mozilla
正規表現はとても簡単です.
探す キャプチャグループの作成 キャプチャグループのみが他の部分なしで抽出されます. スクリーンショットは、あなたが見つけることができる正規表現でキャプチャされているかを説明するhere :
その後、デコードされたbase 64文字列を
出力を説明するGIF
SerPapiは5000の検索の無料トライアルと有料APIです.
最大の違いは、それがすでにエンドユーザーのために行われているので、適切なイメージサイズを得るためにどこで特定の要素を解析する場所から把握する必要はありません.それ以外の場合、スクリプトのリクエストがブロックされるとパーサを維持するか、方法を見つける必要はありません.
Code in the online IDE • Google Inline Images API
何か質問や何かが正しく動作していない場合や他の何かを書くには、コメントのセクションやTwitter経由でコメントをドロップすること自由に感じなさい.
あなた
Dimitryと残りのserpapiチーム.
イントロ
このブログのポストは、GoogleのWebスクレーピングシリーズの継続です.ここでは、Pythonを使用してインライン画像をscrapeする方法が表示されます
beautifulsoup
, requests
, lxml
, re
, base64
, BytesIO
, PIL
ライブラリ.別のAPIソリューションを示します.注:このブログ記事は、あなたがよく知っていると仮定します
beautifulsoup
, requests
ライブラリと正規表現の基本的理解輸入
import requests, lxml, re, base64
from bs4 import BeautifulSoup
from io import BytesIO # for decoding base64 image
from PIL import Image # for saving decoded image
from serpapi import GoogleSearch # alternative API solution
スクラップ
プロセス
コンテナ、リンクを選択し、写真が使用されています.
サムネイルの抽出
サムネイルを抽出するには
<img>
タグ付きid
dimg_XX
(xx -数).ソースコードをオープンしたら
dimg_36
(またはHTMLコードに依存する他の数字)には2つの出現があり、そのうちの1つは<script>
タグ、それは我々が必要です.サムネイルを抽出するには
regex
それらを得るために<script>
タグを指定します.src
属性を出力します.data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
は base64
符号化画像このトピックについての詳細はDeveloper Mozilla
正規表現はとても簡単です.
s='data:image/jpeg;base64,(.*?)';
正規表現の説明s='data:image/jpeg;base64,
(.*?)
そしてそれはすべてをつかむでしょう';
シンボル.その後、デコードされたbase 64文字列を
PIL
モジュールです.より多くのStackOverFlow answer .コード
import requests, lxml, re, urllib.parse, base64
from bs4 import BeautifulSoup
from PIL import Image
from io import BytesIO
headers = {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582"
}
params = {
"q": "minecraft shareds photo",
"sourceid": "chrome",
}
html = requests.get("https://www.google.com/search", params=params, headers=headers)
soup = BeautifulSoup(html.text, 'lxml')
for result in soup.select('div[jsname=dTDiAc]'):
link = f"https://www.google.com{result.a['href']}"
being_used_on = result['data-lpage']
print(f'Link: {link}\nBeing used on: {being_used_on}\n')
# finding all script (<script>) tags
script_img_tags = soup.find_all('script')
# https://regex101.com/r/L3IZXe/4
img_matches = re.findall(r"s='data:image/jpeg;base64,(.*?)';", str(script_img_tags))
for index, image in enumerate(img_matches):
try:
# https://stackoverflow.com/a/6966225/15164646
final_image = Image.open(BytesIO(base64.b64decode(str(image))))
# https://www.educative.io/edpresso/absolute-vs-relative-path
# https://stackoverflow.com/a/31434485/15164646
final_image.save(f'your/absolute_or_relative/path/inline_image_{index}.jpg', 'JPEG')
except:
pass
------------------
# part of the output:
'''
Link: https://www.google.com/search?q=minecraft+shaders+photo&tbm=isch&source=iu&ictx=1&fir=1DCWjzl0od3bFM%252Cc4Qd0ZKVFnHrsM%252C_&vet=1&usg=AI4_-kTAvknTGktfEC1K8ciH7Ot7GsAFkA&sa=X&ved=2ahUKEwiAiaDV6_HxAhVBeawKHfbtDCIQ9QF6BAgWEAE#imgrc=1DCWjzl0od3bFM
Being used on: https://pixabay.com/illustrations/minecraft-shader-minecraft-wallpaper-1970876/
Link: https://www.google.com/search?q=minecraft+shaders+photo&tbm=isch&source=iu&ictx=1&fir=bwVoAE4HTl8GXM%252Cz3y5GvasoN8hFM%252C_&vet=1&usg=AI4_-kRfUHjrz711om99elb_i3GwJuTBnw&sa=X&ved=2ahUKEwiAiaDV6_HxAhVBeawKHfbtDCIQ9QF6BAgVEAE#imgrc=bwVoAE4HTl8GXM
Being used on: https://www.pcgamesn.com/minecraft/minecraft-shaders-best-graphics-mods
...
'''
背景に保存された画像:出力を説明するGIF
GoogleのインラインイメージAPIを使用する
SerPapiは5000の検索の無料トライアルと有料APIです.
最大の違いは、それがすでにエンドユーザーのために行われているので、適切なイメージサイズを得るためにどこで特定の要素を解析する場所から把握する必要はありません.それ以外の場合、スクリプトのリクエストがブロックされるとパーサを維持するか、方法を見つける必要はありません.
import json
from serpapi import GoogleSearch
params = {
"api_key": "YOUR_API_KEY",
"engine": "google",
"q": "minecraft shaders photo",
"hl": "en",
}
search = GoogleSearch(params)
results = search.get_dict()
print(json.dumps(results['inline_images'], indent=2, ensure_ascii=False))
------------------------
'''
[
{
"link": "/search?q=minecraft+shaders+photo&hl=en&tbm=isch&source=iu&ictx=1&fir=bwVoAE4HTl8GXM%252Cz3y5GvasoN8hFM%252C_&vet=1&usg=AI4_-kRfUHjrz711om99elb_i3GwJuTBnw&sa=X&ved=2ahUKEwit6Jq38PHxAhUkSTABHfJyCn8Q9QF6BAgWEAE#imgrc=bwVoAE4HTl8GXM",
"thumbnail": "https://serpapi.com/searches/60f6e03895bf92b91f6fb3d6/images/9cce8031b6aba2675322296c8d247839d434db3be723a5fec2f933d8b4bd4d1e.jpeg"
}
]
...
'''
リンク
Code in the online IDE • Google Inline Images API
アウトロ
何か質問や何かが正しく動作していない場合や他の何かを書くには、コメントのセクションやTwitter経由でコメントをドロップすること自由に感じなさい.
あなた
Dimitryと残りのserpapiチーム.
Reference
この問題について(Googleのインライン画像をスクラップ), 我々は、より多くの情報をここで見つけました https://dev.to/dmitryzub/scrape-google-inline-images-with-python-mncテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol