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”