Top.Mail.Ru
Ответы

PYTHON BS4 НЕ МОЖЕТ НАЙТИ ТЕГ

123456
 def get_info_by_headers():
    session = requests.Session()
    responseq = session.get('https://2ip.ru/', headers=headers).text
    soup = BeautifulSoup(responseq, 'lxml')

    user_ip = soup.find('div', _class='main-ip-history').find('div', _class='main-ip-history__container').find('ul', _class='main-ip-history__list').find_all('li')[1].find('span', _class='main-ip-history__container__ip').text.strip() 

Вот код, когда я пытаюсь найти ip то мне выдает ошибку -
AttributeError: 'NoneType' object has no attribute 'find'.

Хотя тег div с классом 'main-ip-history' существует на этой странице.
Ниже есть фото

Помогите пожалуйста

По дате
По рейтингу
Аватар пользователя
Ученик

Проблема в вашем коде заключается в использовании неправильного атрибута _class вместо class_ в методе find. Попробуйте исправить ваш код следующим образом:

123456789101112131415
 import requests 
from bs4 import BeautifulSoup 
 
def get_info_by_headers(): 
    headers = { 
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' 
    } 
    session = requests.Session() 
    responseq = session.get('https://2ip.ru/', headers=headers).text 
    soup = BeautifulSoup(responseq, 'lxml') 
 
    user_ip = soup.find('div', class_='main-ip-history').find('ul', class_='main-ip-history__list').find_all('li')[1].find('span', class_='main-ip-history__container__ip').text.strip() 
    return user_ip 
 
print(get_info_by_headers()) 

Обратите внимание на следующие изменения:
Заменил _class на class_ в методах find и find_all.
Убрал лишние вызовы find для промежуточных контейнеров, которые не нужны для поиска нужного элемента.
Попробуйте выполнить этот код и проверьте, решена ли проблема.

Аватар пользователя
Мыслитель

ты ищешь div с классом, в твоем случае нужно искать span

123456
 def get_info_by_headers(): 
    session = requests.Session() 
    responseq = session.get('https://2ip.ru/').text 
    soup = BeautifulSoup(responseq, 'lxml') 
    userip=soup.find('span', class_='main-ip-history__container__ip').text.strip()
    return(userip) 

на выходе IP

Аватар пользователя
Профи

Зачем делать эту цепочку поиска если сразу можно за 1 раз?

1
 user_ip = soup.find('span', _class='main-ip-history__container__ip').text.strip() 
Аватар пользователя
Ученик

AttributeError: 'NoneType' object has no attribute 'text'
Не ищет



Видео по теме