Python - BS4: извлечь текст между div | - PullRequest
0 голосов
/ 26 февраля 2020

Цель:

Моя цель - получить данные / текст между div class="alert-info", как только будет сгенерирована полезная нагрузка

<div class="alert-info col-lg-12 wrapped">data</div>

Фон:

У меня есть успешно разместил данные в локальном URL-адресе сервера, и они вернули / сгенерировали полезную нагрузку в том же URL Теперь мой следующий шаг - сохранить эту конкретную полезную нагрузку в переменной. URL остаются неизменными до и после генерации полезной нагрузки

Устранение неполадок:

Проверка элемента перед генерацией полезной нагрузки:

<div class="alert-info col-lg-12 wrapped"></div>

Проверка элемента после генерации полезной нагрузки:

<div class="alert-info col-lg-12 wrapped">DATA</div>

Код:

import requests
from bs4 import BeautifulSoup

#This data will post to the URL
login_data1 = {
    'ABC':'ZYZ'}

with requests.Session() as s:
    url = 'http://localhost/'
    r = s.get(url)
    soup = BeautifulSoup(r.content, 'html.parser')
    login_data1['App'] = soup.find('input', attrs={'name': 'AppKey'})['value']
    d = s.post(url, params=login_data1) # , data=login_data,
    print(r.text.strip()) 
# Till here, payload is generated and I can see it in  <div class="alert-info col-lg-12 wrapped">data</div>

#Tries - Not Succeeded
    soup = BeautifulSoup(r.content, 'html.parser')
    Payload = soup.findAll('span', {"class":"alert-info"}).decode_contents()
    print(Payload)

Как мы можем этого достичь? используя внутренний / внешний HTML, CSS селектор?

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

@ sundeep Большое спасибо за вашу прекрасную поддержку и помощь. Выложить ответ здесь. Класс "col-lg-1" используется вместо "alert-info"

url = 'URL'
r = s.get(url)
resp = BeautifulSoup(r.content, 'html.parser')
# print(resp.prettify())
Payload = resp.findAll('div', {"class":"col-lg-12"})[0].text
print(Payload)
0 голосов
/ 26 февраля 2020

Не уверен, если вы хотите извлечь текст из тега, если это так,

Предполагается, что r равно <div class="alert-info col-lg-12 wrapped">DATA</div>

soup = BeautifulSoup('<div class="alert-info col-lg-12 wrapped">DATA</div>', 'html.parser')
Payload = soup.findAll('div', {"class":"alert-info"})
print(Payload[0].string)

Результат:

DATA

Если вам нужно, чтобы findAll находился в диапазоне, убедитесь, что вы итерируете get .string для каждого элемента, чтобы получить внутренний текст. Ссылка на документацию: .string

Убедитесь, что вы добавляете пример ответа на вопрос, если вам нужны дополнительные разъяснения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...