Рубрики
Без рубрики

Скрейп DuckDuckgo Inline Images с Python

Содержание: вступление, импорт, то, что будет скранировано, процесс, код, ссылки, outro. Вступление в это … Tagged с помощью Python, учебного пособия, скрещивания в Интернете, науки о данных.

Содержание: вступление, импорт, то, что будет скранировано, процесс, код, ссылки, 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 GistDuckDuckgo Inline Images API

Опередить

Если у вас есть какие -либо вопросы или что -то не работает правильно или вы хотите написать что -нибудь еще, не стесняйтесь бросить комментарий в разделе комментариев или через Twitter в @serp_api Анкет

Ваш, Dimitry и остальная часть команды Serpapi.

Оригинал: “https://dev.to/dimitryzub/scrape-duckduckgo-inline-images-with-python-576j”