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

Scrape Duckduckgo Органические новости Результаты с Python

Содержание: введение, импорт, что будет соскрешено, процесс, код, ссылки, OUTRO. Интро это … Теги с Python, учебником, HTML, WebScraping.

Scraping Web Duckduckgo (7 части серии)

Содержание: введение, импорт, что будет соскрешено, процесс, код, ссылки, OUTRO.

вступление

Этот блог Post – это продолжение серии SCRAPING WEB DUCKDUCCGO. Здесь вы увидите, как выяснить результаты новостей из органического поиска с помощью Python с Селен библиотека. Будет показано альтернативное решение API.

Предпосылки: знакомство с селен Библиотека и регулярные выражения.

Импорт

from selenium import webdriver
import urllib.parse, re

Что будет соскрешено

Обработать

Grabbing контейнер, титул, ссылка, источник, дата опубликовано CSS селекторы.

Чтобы получить точный выбор, вам нужно указать ID селектор, а затем класс селектор. CSS Селекторы Ссылка Отказ

Селекторгаджет Расширение использовалось для захвата CSS. селекторы.

Экстракт и декодировать URL миниатюр

Удобный способ извлечения миниатюр – использовать Regex который вы можете видеть в действии на Regex101 или в онлайн IDE. .

Вы можете использовать либо:

re.findall(pattern, string) # returns an array
re.finditer(pattern, string) # returns an iterator 

В основном при использовании findall () Метод вы не может Укажите .группа () в том числе именованные группы в то время как Finditer () Метод может.

Скриншот, чтобы показать, что происходит с регулярным выражением :

Примечание. Я не уверен, что это отличное общее регулярное выражение для этой задачи, но это работает.

После этого URL необходимо декодировать с Urllib.parse.unquote () Метод, это легко.

# encoded
>>> https%3A%2F%2Fimage.cnbcfm.com%2Fapi%2Fv1%2Fimage%2F106261274-1574442599483rtx7a0ls.jpg%3Fv%3D1574452686
# decoded
>>> https://image.cnbcfm.com/api/v1/image/106261274-1574442599483rtx7a0ls.jpg?v=1574452686

Код

from selenium import webdriver
import urllib.parse, re

driver = webdriver.Chrome(executable_path='C:/Users/dimit/PycharmProjects/pythonProject/Scrape Search Engines/Walmart/chromedriver.exe')
driver.get('https://duckduckgo.com/?q=elon musk&kl=us-en&ia=web')

for result in driver.find_elements_by_css_selector('#m1-0 .has-image'):
    title = result.find_element_by_css_selector('#m1-0 .js-carousel-item-title').text.strip()
    link = result.find_element_by_css_selector('#m1-0 .js-carousel-item-title').get_attribute('href')
    source = result.find_element_by_css_selector('#m1-0 .result__url').text
    date = result.find_element_by_css_selector('#m1-0 .tile__time').text
    thumbnail_encoded = result.find_element_by_css_selector('#m1-0 .module--carousel__image').get_attribute('style')

    # https://regex101.com/r/98r2qW/1
    match_thumbnail_urls = ''.join(re.findall(r'background-image: url\(\"\/\/external-content\.duckduckgo\.com\/iu\/\?u=(.*)&f=1&h=110\"\);', thumbnail_encoded))

    # https://www.kite.com/python/answers/how-to-decode-a-utf-8-url-in-python
    thumbnail = urllib.parse.unquote(match_thumbnail_urls)
    print(f'{title}\n{link}\n{source}\n{date}\n{thumbnail}\n')

driver.quit()

-------------------
'''
Elon Musk admits Tesla's Cybertruck could flop
https://www.cnbc.com/2021/07/15/elon-musk-admits-the-cybertruck-could-flop.html
CNBC
4h
https://image.cnbcfm.com/api/v1/image/106261274-1574442599483rtx7a0ls.jpg?v=1574452686
'''

Использование новостей Duckduckgo результатов API

Serpapi – это платный API с бесплатным планом.

Здесь вы увидите, что разница в том, что нет необходимости выяснить, как соскребать эскиз, если они нужны. Все, что нужно сделать, это повторять структурированные JSON нить.

from serpapi import GoogleSearch
import json # for pretty printing

params = {
  "api_key": "YOUR_API_KEY",
  "engine": "duckduckgo",
  "q": "elon musk",
  "kl": "us-en"
}

search = GoogleSearch(params)
results = search.get_dict()

print(json.dumps(results['news_results'], indent=2, ensure_ascii=False))

------------------------
'''
[
  {
    "position": 1,
    "title": "Elon Musk admits Tesla's Cybertruck could flop",
    "link": "https://www.cnbc.com/2021/07/15/elon-musk-admits-the-cybertruck-could-flop.html",
    "snippet": "Tesla CEO Elon Musk admitted Thursday on Twitter that the Cybertruck might flop but said he doesn't care because he loves its unusual trapezoid-like design.",
    "source": "CNBC",
    "date": "4 hours ago",
    "thumbnail": "https://image.cnbcfm.com/api/v1/image/106261274-1574442599483rtx7a0ls.jpg?v=1574452686"
  }
]
'''

Ссылки

Github GistНовости Duckduckgo Результаты API

Outro.

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

Твой, димитрий, а остальная часть команды серпапи.

Scraping Web Duckduckgo (7 части серии)

Оригинал: “https://dev.to/dimitryzub/scrape-duckduckgo-organic-news-results-with-python-kod”