Содержание: вступление, импорт, то, что будет скранировано, процесс, код, ссылки, outro.
вступление
Этот пост в блоге является продолжением серии Web Scraping Google. Здесь вы увидите, как соскрести встроенные изображения, используя Python с BeautifulSoup
, Запросы
, LXML
, Re
, База64
, Байтозио
, Pil
библиотеки. Альтернативное решение API будет показано.
ПРИМЕЧАНИЕ: этот пост в блоге предполагает, что вы знакомы Beautifulsoup , Запросы Библиотеки и базовое понимание регулярных выражений.
Импорт
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
Что будет соскреблено
Процесс
Выбор контейнера, ссылки и где используется фотография.
Извлечение миниатюры Чтобы извлечь миниатюру, нам нужно посмотреть на
тег с id
dimg_xx
( xx – некоторое число ).
Если вы открываете исходный код (Ctrl + U) и попробуйте найти dimg_36
( или другие цифры в зависимости от кода HTML ) Вы увидите, что есть 2 происшествия, которые будут найдены, и один из них будет где -то в <Скрипт>
Теги, это то, что нам нужно.
Чтобы извлечь миниатюры, нам нужно использовать regex
Чтобы получить их из <Скрипт>
Теги, потому что если бы вы разбирали данные из SRC
Атрибут, вывод, который вы получите, будет таким: Данные: Image/GIF; BASE64, R0LGODLHAQABAAAAP/////////YH5BAEKAAEALAAAAAABAAAAAAICTAEAOW ==
который BASE64
кодированная картина.
Подробнее об этой теме можно найти на Разработчик Мозилла
Регулярное выражение чрезвычайно просто:
s='data:image/jpeg;base64,(.*?)';
Пояснение регулярного выражения:
- ищу
S = 'Data: Image/JPEG; BASE64,
- Создание группы захвата
(. *?)
который захватит все и заканчивается';
символы. - только Группа захвата будет извлечен без других частей.
Снимок экрана, чтобы проиллюстрировать то, что захватывается регулярным выражением, которое вы можете найти Здесь :
После этого строка декодированного Base64 можно сохранить с помощью Pil
модуль. Больше можно найти на Stackoverflow Ответ Анкет
Код
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 (
Оригинал: “https://dev.to/dimitryzub/scrape-google-inline-images-with-python-mnc”