r4khic
@r4khic
Начинающий кодер на python

Как устранить такую ошибку Beautiful Soup is not an HTTP client?

вот сам код
import requests
from bs4 import BeautifulSoup
import pymysql

def get_html(url):
    r = requests.get(url)
    return r.text
# < Получаем ссылки
def get_resource_links(resource_page,links_rule,resource_domain):
    resource_links = []
    soup = BeautifulSoup(resource_page,'lxml')
    resource_links_blocks = soup.findAll(links_rule[0],{links_rule[1]:links_rule[2]})
    for resource_link_block in resource_links_blocks:
        a_tag = resource_link_block .find("a")
        if a_tag:
            link = a_tag.get("href")
            resource_links.append(resource_domain + link)
    return resource_links

def get_item_title(resource_link,title_rule):
    soup = BeautifulSoup(resource_link,'lxml')
    item_title = soup.find(title_rule[0],{title_rule[1]:title_rule[2]})
    return item_title
# < Подключение к базе данных.
connection = pymysql.connect(host='localhost',
                             user='root',
                             password='',
                             db='news_portal',
                             charset='utf8',
                             autocommit=True)
cursor = connection.cursor()

# < Запрос правил выдергивания контента.
cursor.execute('SELECT * FROM `resource`')
resources=cursor.fetchall()
# < Цикл для перебора из кортежа.
for resource in resources:
    resource_name=resource[1]
    resource_link=resource[2]
    resource_url=resource[3]
    link_rule=resource[4]
    title_rule=resource[8]
    print(resource_name)
    resource_domain=resource_link

    links_rule=link_rule.split(',')
    title_rule=title_rule.split(',')
    resource_page = get_html(resource_url)
    resource_links = get_resource_links(resource_page,links_rule,resource_domain)
    print('кол-во ссылок: '+str(len(resource_links)))

    for resource_link in resource_links:
        items_title = get_item_title(resource_link,title_rule)
        print(resource_link)
        print(items_title)

connection.close()


При запуске скрипта такая ошибка
C:\Users\Администратор\AppData\Local\Programs\Python\Python37-32\lib\site-packages\bs4\__init__.py:357: UserWarning: "https://www.zakon.kz/4982122-rasprostranyaemuyu-v-..." looks like a URL. Beautiful Soup is not an HTTP client. You should probably use an HTTP client like requests to get the document behind the URL, and feed that document to Beautiful Soup.


Из-за чего она появляется,как устранить?
  • Вопрос задан
  • 123 просмотра
Пригласить эксперта
Ответы на вопрос 1
Что это?
def get_item_title(resource_link,title_rule):
    soup = BeautifulSoup(resource_link,'lxml')
    item_title = soup.find(title_rule[0],{title_rule[1]:title_rule[2]})
    return item_title

Вы передаёте в функцию список ссылок resource_link, и передаёте его как параметр в объект класса BeautifulSoup. Но bs4 работает с html документом, а не со списком.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
07 апр. 2020, в 19:10
2000 руб./за проект
07 апр. 2020, в 18:58
4000 руб./за проект