gpt4 book ai didi

python - 使用 Beautiful Soup 解析 html 表单输入标签

转载 作者:太空宇宙 更新时间:2023-11-03 15:35:44 25 4
gpt4 key购买 nike

我正在尝试抓取一个网站。如果只有一种开始形式和一种结束形式,那么没有问题——标签和数据位于其之间。但是,当网站上的数据显示在复选框下时,代码中的数据会处于奇怪的位置。有人有同样的问题吗?

这是一个我想要数据的基本示例网页:

<div class="label"></div>
<input disabled="" type="checkbox" name="t_pow_ports:f_p_a:3486" class="forminput" id="ajaxField-76" checked="">
&nbsp;&nbsp;Airport
<div class="label"></div>
<input disabled="" type="checkbox" name="t_pow_ports:f_p_b:3486" checked="" class="forminput" id="ajaxField-77">
&nbsp;&nbsp;Bunkers
<div class="label"></div>
<input disabled="" type="checkbox" name="t_pow_ports:f_p_c:3486" class="forminput" id="ajaxField-78">
&nbsp;&nbsp;Containers
<div class="label"></div>
<input disabled="" type="checkbox" name="t_pow_ports:f_p_l:3486" class="forminput" id="ajaxField-79">
&nbsp;&nbsp;Cruise
<div class="label"></div>
....

我需要获取数据:机场、掩体等(数据),这些数据在其输入数组中具有“checked =”“”。第一个问题:确保我只得到检查值第二个问题:如何获取之间的数据

<div>..</div><input...> data <div>...</div> 

通过使用以下代码:

import requests
import bs4
from bs4 import BeautifulSoup
import pandas

r = requests.get("http://directories.lloydslist.com/?p=1635")
c = r.content
soup = BeautifulSoup(c, "html.parser")
print(soup.prettify())
all = soup.find_all("div",{"id":"section-1785-body"},{"class":"sectionbody"})

我得到以下格式:

<div class="label"></div>
<input checked="" class="forminput" disabled="" id="ajaxField-115" name="t_pow_ports:f_p_a:5779" type="checkbox"/>
Airport
<div class="label"></div>
<input checked="" class="forminput" disabled="" id="ajaxField-116" name="t_pow_ports:f_p_b:5779" type="checkbox"/>
Bunkers
<div class="label"></div>
.....
....
<input checked="" class="forminput" disabled="" id="ajaxField-119" name="t_pow_ports:f_p_y:5779" type="checkbox"/> Dry Bulk
<div class="label"></div></div>

所以如果我使用以下代码:

abc = all[0].find_all("input", {"class":"forminput"},"checked")

我没有得到任何数据:

<input class="forminput" disabled="" id="ajaxField-20"    name="t_pow_ports:f_p_a:595" type="checkbox"/>,
<input class="forminput" disabled="" id="ajaxField-21" name="t_pow_ports:f_p_b:595" type="checkbox"/>,
<input class="forminput" disabled="" id="ajaxField-22" name="t_pow_ports:f_p_c:595" type="checkbox"/>,
....

有人知道解决这个问题的方法吗?

最佳答案

您需要使用navigableString用于在检查输入后获取下一个同级。

尝试以下操作:

from bs4 import BeautifulSoup as Soup

html_str = """
<div>
<div class="label"></div>
<input disabled="" type="checkbox" name="t_pow_ports:f_p_a:3486" class="forminput" id="ajaxField-76" checked=""/>
&nbsp;&nbsp;Airport

<div class="label"></div>
<input disabled="" type="checkbox" name="t_pow_ports:f_p_b:3486" checked="" class="forminput" id="ajaxField-77"/>
&nbsp;&nbsp;Bunkers

<div class="label"></div>
<input disabled="" type="checkbox" name="t_pow_ports:f_p_c:3486" class="forminput" id="ajaxField-78"/>
&nbsp;&nbsp;Containers

<div class="label"></div>
<input disabled="" type="checkbox" name="t_pow_ports:f_p_l:3486" class="forminput" id="ajaxField-79"/>
&nbsp;&nbsp;Cruise

<div class="label"></div>
</div>
"""

soup = Soup(html_str, "html.parser")

forminput = soup.find_all("input", {"class":"forminput"})
for item in forminput:
if item.get('checked') is not None:
# now work with navigable string! be careful for empty lines
name = item.next_sibling.strip()
print(name)

此代码片段的输出是:

Airport
Bunkers

关于python - 使用 Beautiful Soup 解析 html 表单输入标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42534592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com