Это сообщение в блоге покажет вам, как очищать обычные результаты от Brave Search. В этой статье будет показано, как очистить заголовок, ссылку, отображаемую ссылку, фрагменты и дополнительные ссылки.

Содержание:

Что такое Brave Search

Рынок потребительских технологий для обеспечения конфиденциальности быстро растет. Если вы отслеживаете позицию своего веб-сайта в других поисковых системах, вы можете воспользоваться преимуществами этого растущего рынка.

Brave Search в настоящее время находится на стадии бета и предлагает пользователям независимую поисковую систему с конфиденциальностью, альтернативу другим крупным поисковым системам. Brave не хочет заменять поисковые системы Google или Bing, как сказал Хосеп М. Пуйоль, руководитель отдела поиска в Brave: Нам нужно больше выбора, не для замены Google или Bing, а для того, чтобы предложить альтернативы. »

Brave search быстрее по сравнению с Chrome, потому что он (Brave Browser) блокирует рекламу и трекеры, что ускоряет загрузку страницы, а также уважает конфиденциальность пользователей и является единственной независимой поисковой системой. Другими словами, у него есть индекс, который также дает ему независимость от других поисковых систем.

Как сказал Брендан Эйх, генеральный директор и соучредитель Brave: Brave Search предлагает новый способ получения релевантных результатов с помощью индекса, основанного на сообществе, при этом гарантируя конфиденциальность. ».

Но подождите, DuckDuckGo уже есть. Поскольку это сообщение в блоге в основном посвящено очистке данных, вы можете взглянуть на различия в фокусе.

Вступление

Это сообщение в блоге - первое из серии веб-скрапинга Brave Search. Здесь вы увидите, как очищать обычные результаты Brave Search с помощью Python с библиотеками beautifulsoup, requests, lxml.

Примечание. В этом сообщении блога не рассматриваются все мелочи, которые могут появиться в обычных результатах поиска. Макет HTML может быть изменен в будущем, поэтому некоторые из CSS селекторов могут не работать.

SelectorGadget использовался для захвата селекторов CSS.

Убедитесь, что вы используете user-agent, иначе вы получите пустой результат. Если вы хотите узнать больше об этой теме, у меня есть отдельная запись в блоге о шансах на блокировку при сканировании веб-страниц в поисковых системах.

Предпосылки

$ pip install requests
$ pip install lxml 
$ pip install beautifulsoup4

Убедитесь, что у вас есть базовые знания об упомянутых выше библиотеках, поскольку это сообщение в блоге не совсем руководство для начинающих, поэтому убедитесь, что вы знакомы с ними на базовом уровне. Я постараюсь показать в коде, что это не так уж и сложно.

Кроме того, убедитесь, что вы имеете базовое представление о CSS селекторах, потому что методы select() / select_one() beautifulsoup, которые принимают CSS селекторы. CSS справочник по селекторам.

Импорт

from bs4 import BeautifulSoup
import requests, lxml, json

Что будет очищено

А также рейтинг и результаты голосования

Процесс

Выбор заголовка, ссылки, отображаемой ссылки, фрагмента / изображения фрагмента, встроенных дополнительных ссылок из контейнера со всеми необходимыми данными:

Чтобы получить дополнительные ссылки, мы можем использовать понимание списка и одновременно создать словарь, в этом случае это будет примерно так:

sitelinks = [
          {
            "title": sitelink.text
            "link": sitelink['href']
          } for sitelink in soup.select('CSS_SELECTOR')]

Код

from bs4 import BeautifulSoup
import requests, lxml, json

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': 'dune film',
  'source': 'web'
}

def get_organic_results():

  html = requests.get('https://search.brave.com/search', headers=headers, params=params)
  soup = BeautifulSoup(html.text, 'lxml')

  data = []

  for result, sitelinks in zip(soup.select('.snippet.fdb'), soup.select('.deep-results-buttons .deep-link')):
    title = result.select_one('.snippet-title').text.strip()
    title_img = result.select_one('.favicon')['src']
    link = result.a['href']
    displayed_link = result.select_one('.snippet-url').text.strip().replace('\n', '')

    try:
      # removes "X time ago" -> split by \n -> removes all whitespaces to the LEFT of the string
      snippet = result.select_one('.snippet-content .snippet-description').text.strip().split('\n')[1].lstrip()
      snippet_img = result.select_one('.snippet-content .thumb')['src']
    except: 
      snippet = None
      snippet_img = None
    
    # list comprehension for creating key-value pair of title/link from sitelink results 
    sitelinks = [
          {
            title: sitelink.text.strip(),
            link: sitelink['href']
          } for sitelink in result.select('.deep-results-buttons .deep-link')]

    try:
      rating = result.select_one('.ml-10').text.strip().split(' - ')[0]
      votes = result.select_one('.ml-10').text.strip().split(' - ')[1]
    except: 
      rating = None
      votes = None

    data.append({
      'title': title,
      'title_img': title_img,
      'link': link,
      'displayed_link': displayed_link,
      'snippet': snippet,
      'snippet_img': snippet_img,
      'rating': rating,
      'votes': votes,
      'sitelinks': sitelinks
    })
      
  print(json.dumps(data, indent=2, ensure_ascii=False))


get_organic_results()

----------------
# part of the output
'''
[
  {
    "title": "Dune (2021 film) - Wikipedia",
    "title_img": "https://imgr.search.brave.com/wc-7XNJZ_tfrnnF72ZK8SIc1HV0ejHNf2xu1qguiQQw/fit/32/32/ce/1/aHR0cDovL2Zhdmlj/b25zLnNlYXJjaC5i/cmF2ZS5jb20vaWNv/bnMvNjQwNGZhZWY0/ZTQ1YWUzYzQ3MDUw/MmMzMGY3NTQ0ZjNj/NDUwMDk5ZTI3MWRk/NWYyNTM4N2UwOTE0/NTI3ZDQzNy9lbi53/aWtpcGVkaWEub3Jn/Lw",
    "link": "https://en.wikipedia.org/wiki/Dune_(2021_film)",
    "displayed_link": "en.wikipedia.org› wiki  › Dune_(2021_film)",
    "snippet": "Dune (titled onscreen as Dune: Part One) is a 2021 American epic science fiction film directed by Denis Villeneuve with a screenplay by Jon Spaihts, Villeneuve, and Eric Roth. It is the first of a planned two-part adaptation of the 1965 novel of the same name by Frank Herbert, primarily covering ...",
    "snippet_img": "https://imgr.search.brave.com/IClP0pAcslDAfO9KZ_RAbCFo1Mt16hng2ec6U8GI4c0/fit/200/200/ce/1/aHR0cHM6Ly91cGxv/YWQud2lraW1lZGlh/Lm9yZy93aWtpcGVk/aWEvZW4vOC84ZS9E/dW5lXyUyODIwMjFf/ZmlsbSUyOS5qcGc",
    "rating": null,
    "votes": null,
    "sitelinks": [
      {
        "Dune (2021 film) - Wikipedia": "Premise",
        "https://en.wikipedia.org/wiki/Dune_(2021_film)": "https://en.wikipedia.org/wiki/Dune_(2021_film)#Premise"
      },
      {
        "Dune (2021 film) - Wikipedia": "Cast",
        "https://en.wikipedia.org/wiki/Dune_(2021_film)": "https://en.wikipedia.org/wiki/Dune_(2021_film)#Cast"
      },
      {
        "Dune (2021 film) - Wikipedia": "Production",
        "https://en.wikipedia.org/wiki/Dune_(2021_film)": "https://en.wikipedia.org/wiki/Dune_(2021_film)#Production"
      },
      {
        "Dune (2021 film) - Wikipedia": "Music",
        "https://en.wikipedia.org/wiki/Dune_(2021_film)": "https://en.wikipedia.org/wiki/Dune_(2021_film)#Music"
      },
      {
        "Dune (2021 film) - Wikipedia": "Marketing",
        "https://en.wikipedia.org/wiki/Dune_(2021_film)": "https://en.wikipedia.org/wiki/Dune_(2021_film)#Marketing"
      },
      {
        "Dune (2021 film) - Wikipedia": "Release",
        "https://en.wikipedia.org/wiki/Dune_(2021_film)": "https://en.wikipedia.org/wiki/Dune_(2021_film)#Release"
      },
      {
        "Dune (2021 film) - Wikipedia": "Reception",
        "https://en.wikipedia.org/wiki/Dune_(2021_film)": "https://en.wikipedia.org/wiki/Dune_(2021_film)#Reception"
      },
      {
        "Dune (2021 film) - Wikipedia": "Future",
        "https://en.wikipedia.org/wiki/Dune_(2021_film)": "https://en.wikipedia.org/wiki/Dune_(2021_film)#Future"
      }
    ]
  }
... # other results
]
'''

Ссылки

Код в онлайн-среде IDEУменьшите вероятность блокировки при парсинге веб-страниц

Заключение

Если у вас есть какие-либо вопросы или предложения, или что-то работает неправильно, оставьте комментарий в разделе комментариев.

Если вы хотите получить доступ к этой функции через SerpApi, проголосуйте за запрос функции Support Brave Search, который в настоящее время на рассмотрении.

Ваш,
Дмитрий, и остальная часть команды SerpApi.

Первоначально опубликовано на https://serpapi.com 25 октября 2021 г.

Больше контента на plainenglish.io