#html #python-3.x #web-scraping #beautifulsoup
#HTML #python-3.x #веб-очистка #beautifulsoup
Вопрос:
Я хочу создать скрипт, который выводит ссылки на результаты поиска bing на консоль. Проблема в том, что когда я запускаю скрипт, вывода нет. Я полагаю, что веб-сайт считает меня ботом?
from bs4 import BeautifulSoup
import requests
search = input("search for:")
params = {"q": "search"}
r = requests.get("http://www.bing.com/search", params=params)
soup = BeautifulSoup(r.text, "html.parser")
results = soup.find("ol", {"id": "b_results"})
links = results.find_all("Li", {"class": "b_algo"})
for item in links:
item_text = item.find("a").text
item_href = item.find("a").attrs["href"]
if item_text and item_href:
print(item_text)
print(item_href)
Комментарии:
1. может
find_all
быть чувствительным к регистру? т. е.Li
противli
Ответ №1:
Вам нужно использовать переменную поиска вместо «search». У вас также есть опечатка в вашем скрипте: li
в нижнем регистре.
Измените эти строки:
params = {"q": "search"}
.......
links = results.find_all("Li", {"class": "b_algo"})
К этому:
params = {"q": search}
........
links = results.find_all("li", {"class": "b_algo"})
Обратите внимание, что некоторые запросы ничего не возвращают. «кроссворд» дает результаты, а «арахис» — нет. Структура страницы результатов может отличаться в зависимости от запроса.
Ответ №2:
В этом коде есть 2 проблемы —
- Поиск — это имя переменной, поэтому его не следует использовать с кавычками. Измените его на нижеприведенный
params = {"q": search}
- Когда вы заключаете имя переменной в кавычки при извлечении ссылки, она становится статической ссылкой. Для динамической ссылки вы должны сделать это, как показано ниже —
r = requests.get("http://www.bing.com/" search, params=params)
После внесения этих 2 изменений, если вы по-прежнему не получаете никаких выходных данных, проверьте, используете ли вы правильный тег в переменной результатов.