Python-BS4:在div之间提取文本|

时间:2020-02-26 09:17:19

标签: python-3.x beautifulsoup request

目标:

我的目标是在生成有效负载后立即在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 :(得分:0)

如果是这种情况,则不确定是否要从标签中提取文本,

假设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放在一个范围内,请确保为每个元素迭代获取.string以获取内部文本。 文档链接:.string

如果您需要其他说明,请确保您要对问题添加示例回答。

答案 1 :(得分:0)

@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)