我需要從下面的link中提取問題的答案,包括複選框。BeautifulSoup:從表格中刪除答案
這是我到目前爲止有:
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')
但這些不會被正確排序,因爲這不是pi找到未寫入紅色的「未提交信息」答案。
我也覺得有更好的方法來做到這一點。理想的情況是我想要的(前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]
謝謝,這看起來真的很棒。我收到錯誤:「TypeError:unorderable types:Tag()
我能夠讓腳本在Python 2中運行,但是有什麼想法如何讓它在Python 3中運行? –
我剛剛重新創建了你的錯誤,並且似乎'Tag()'比較還沒有在Python 3版本中實現。我建議你在beautifulsoup網站上提出一張票,看看是否有解決方法或是否是已知問題。 –