Вывод веб-очистки Python

#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 проблемы —

  1. Поиск — это имя переменной, поэтому его не следует использовать с кавычками. Измените его на нижеприведенный

params = {"q": search}

  1. Когда вы заключаете имя переменной в кавычки при извлечении ссылки, она становится статической ссылкой. Для динамической ссылки вы должны сделать это, как показано ниже —

r = requests.get("http://www.bing.com/" search, params=params)

После внесения этих 2 изменений, если вы по-прежнему не получаете никаких выходных данных, проверьте, используете ли вы правильный тег в переменной результатов.