Это сообщение в блоге покажет вам, как очищать обычные результаты от Brave Search. В этой статье будет показано, как очистить заголовок, ссылку, отображаемую ссылку, фрагменты и дополнительные ссылки.
Содержание:
- Что такое Brave Search
- "Вступление"
- Предпосылки
- Импорт
- Что скребут
- "Процесс"
- "Код"
- Ссылки
- Outro
Что такое 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