gpt4 book ai didi

python - BeautifulSoup:从表单中抓取答案

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

我需要从以下link中抓取问题的答案,包括复选框。

这是我到目前为止所拥有的:

from bs4 import BeautifulSoup
import selenium.webdriver as webdriver

url = 'https://www.adviserinfo.sec.gov/IAPD/content/viewform/adv/Sections/iapd_AdvPrivateFundReportingSection.aspx?ORG_PK=161227&FLNG_PK=05C43A1A0008018C026407B10062D49D056C8CC0'

driver = webdriver.Firefox()
driver.get(url)

soup = BeautifulSoup(driver.page_source)

以下为我提供了所有书面答复(如果有的话):

soup.find_all('span', {'class':'PrintHistRed'})

我想我可以将所有复选框的答案拼凑起来:

soup.find_all('img')

但这些不会正确排序,因为这不会获取未以红色书写的“未提交信息”答案。

我还觉得有更好的方法可以做到这一点。理想情况下,我希望(对于前 6 个问题)返回:

['APEX INVESTMENT FUND, V, L.P',
'805-2054766781',
'Delaware',
'United States',
'APEX MANAGEMENT V, LLC',
'X',
'O',
'No Information Filed',
'NO',
'NO']

编辑

下面马丁的答案似乎可以解决问题,但是当我将其放入循环中时,结果在第三次迭代后开始发生变化。有什么想法可以解决这个问题吗?

from bs4 import BeautifulSoup
import requests
import re

for x in range(5):
url = 'https://www.adviserinfo.sec.gov/IAPD/content/viewform/adv/Sections/iapd_AdvPrivateFundReportingSection.aspx?ORG_PK=161227&FLNG_PK=05C43A1A0008018C026407B10062D49D056C8CC0'
html = requests.get(url)
soup = BeautifulSoup(html.text, "lxml")

tags = list(soup.find_all('span', {'class':'PrintHistRed'}))
tags.extend(list(soup.find_all('img', alt=re.compile('Radio|Checkbox')))[2:]) # 2: skip "are you an adviser" at the top
tags.extend([t.parent for t in soup.find_all(text="No Information Filed")])

output = []

for entry in sorted(tags):
if entry.name == 'img':
alt = entry['alt']
if 'Radio' in alt:
output.append('NO' if 'not selected' in alt else 'YES')
else:
output.append('O' if 'not checked' in alt else 'X')
else:
output.append(entry.text)

print output[:9]

最佳答案

该网站不会通过 Javascript 生成任何所需的 HTML,因此我选择仅使用 requests 来获取 HTML(这应该更快)。

解决问题的一种方法是将三种不同类型的所有标签存储到一个数组中。如果随后对其进行排序,则会导致标签按树顺序排列。

第一个搜索仅使用您的 PrintHistRed 来获取匹配的范围标签。其次,它查找所有 img 标签,其 alt 文本包含单词 RadioCheckbox。最后,它搜索找到 No Information Filed 的所有位置并返回父标记。

现在可以对标签进行排序,并构建一个合适的输出数组,其中包含所需格式的信息:

from bs4 import BeautifulSoup
import requests
import re

url = 'https://www.adviserinfo.sec.gov/IAPD/content/viewform/adv/Sections/iapd_AdvPrivateFundReportingSection.aspx?ORG_PK=161227&FLNG_PK=05C43A1A0008018C026407B10062D49D056C8CC0'
html = requests.get(url)
soup = BeautifulSoup(html.text, "lxml")

tags = list(soup.find_all('span', {'class':'PrintHistRed'}))
tags.extend(list(soup.find_all('img', alt=re.compile('Radio|Checkbox')))[2:]) # 2: skip "are you an adviser" at the top
tags.extend([t.parent for t in soup.find_all(text="No Information Filed")])

output = []

for entry in sorted(tags):
if entry.name == 'img':
alt = entry['alt']
if 'Radio' in alt:
output.append('NO' if 'not selected' in alt else 'YES')
else:
output.append('O' if 'not checked' in alt else 'X')
else:
output.append(entry.text)

print output[:9] # Display the first 9 entries

给你:

[u'APEX INVESTMENT FUND V, L.P.', u'805-2054766781', u'Delaware', u'United States', 'X', 'O', u'No Information Filed', 'NO', 'YES']

关于python - BeautifulSoup:从表单中抓取答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45532846/

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