Содержание: вступление, импорт, то, что будет скранировано, процесс, код, ссылки, outro.
вступление
Этот пост в блоге является продолжением серии Scraping Scraping DuckDuckgo. Здесь вы увидите, как соскрести встроенные результаты изображения, используя Python с Селен
библиотека. Альтернативное решение API будет показано.
Предварительные условия: знакомство с селен библиотека и регулярные выражения.
Импорт
from selenium import webdriver import re, urllib.parse
Что будет соскреблено
Процесс
Процесс очень похож на другие серии постов в блоге DuckDuckgo.
Выбор контейнера, заголовок, ссылки, миниатюры, выбороков CSS с изображением, из которых .get_attribute ()
Метод будет использоваться для захвата Data-ID
, SRC
и href
атрибуты.
Селекторгаджет Расширение Chrome использовалось в GIF выше, чтобы выбрать CSS Селекторы.
Код
from selenium import webdriver import re, urllib.parse driver = webdriver.Chrome(executable_path='path/to/chromedriver.exe') driver.get('https://duckduckgo.com/?q=elon musk dogecoin&kl=us-en&ia=web') for result in driver.find_elements_by_css_selector('.js-images-link'): title = result.find_element_by_css_selector('.js-images-link a img').get_attribute('alt') link = result.find_element_by_css_selector('.js-images-link a').get_attribute('href') thumbnail_encoded = result.find_element_by_css_selector('.js-images-link a img').get_attribute('src') # https://regex101.com/r/4pgG5m/1 match_thumbnail_urls = ''.join(re.findall(r'https\:\/\/external\-content\.duckduckgo\.com\/iu\/\?u\=(.*)&f=1', thumbnail_encoded)) # https://www.kite.com/python/answers/how-to-decode-a-utf-8-url-in-python thumbnail = urllib.parse.unquote(match_thumbnail_urls).replace('&h=160', '') image = result.get_attribute('data-id') print(f'{title}\n{link}\n{thumbnail}\n{image}\n') driver.quit() -------------------------- ''' Dogecoin (DOGE) Price Crash Below Key Support and Even ... https://duckduckgo.com/?q=elon%20musk%20dogecoin&iax=images&ia=images&iai=https://cdn.coingape.com/wp-content/uploads/2021/07/02195033/dogecoin-elon-musk-snl-memes.jpg&kl=us-en https://tse1.mm.bing.net/th?id=OIF.UGa1KGFCz%2f5axclMfq0k4w&pid=Api https://cdn.coingape.com/wp-content/uploads/2021/07/02195033/dogecoin-elon-musk-snl-memes.jpg ... '''
Использование встроенных изображений DuckDuckgo API
Serpapi – платный API с бесплатным планом.
Разница, которую вы сразу увидите, состоит в том, что API дает 30 результатов, а не ~ 8-10 результатов.
В качестве альтернативы все, что вам нужно сделать, это итерация над структурированным Json
Строка, не думая, как очистить данные без рендеринга страницы, или как получить определенные элементы, если они так трудно получить.
import json from serpapi import GoogleSearch params = { "api_key": "YOUR_API_KEY", "engine": "duckduckgo", "q": "elon musk dogecoin", "kl": "us-en" } search = GoogleSearch(params) results = search.get_dict() print(json.dumps(results['inline_images'], indent=2, ensure_ascii=False)) ---------------------- ''' [ { "position": 1, "title": "'Dogefather' Elon Musk Tweets in Support of the ...", "link": "https://gadgets.ndtv.com/cryptocurrency/news/elon-musk-dogecoin-price-cryptocurrency-bitcoin-ethereum-ether-twitter-tweet-support-market-gain-2483505", "thumbnail": "https://tse1.mm.bing.net/th?id=OIF.ryyLYCT1jVMZDADJDf1LVA&pid=Api", "image": "https://i.gadgets360cdn.com/large/elon_musk_reuters_1610084738222.jpg" } ... { "position": 20, "title": "Beware! Your love for Elon Musk and Dogecoin may land you ...", "link": "http://www.businesstelegraph.co.uk/beware-your-love-for-elon-musk-and-dogecoin-may-land-you-in-a-scam-economic-times/", "thumbnail": "https://tse1.mm.bing.net/th?id=OIF.Y4geZY10AJX80AvM8EPCjQ&pid=Api", "image": "http://www.businesstelegraph.co.uk/wp-content/uploads/2021/07/Beware-Your-love-for-Elon-Musk-and-Dogecoin-may-land.jpg" } ] '''
Ссылки
Github Gist • DuckDuckgo Inline Images API
Опередить
Если у вас есть какие -либо вопросы или что -то не работает правильно или вы хотите написать что -нибудь еще, не стесняйтесь бросить комментарий в разделе комментариев или через Twitter в @serp_api Анкет
Ваш, Dimitry и остальная часть команды Serpapi.
Оригинал: “https://dev.to/dimitryzub/scrape-duckduckgo-inline-images-with-python-576j”