我得到了一个问题的回答,我在SO here上提出的问题似乎在我运行代码时起作用。
但是,当我尝试在循环中实现它时,结果在第3次迭代后开始变化。这只是每次调用相同URL的示例。
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, headers={'Cookie': 'PHPSESSID=notimportant'})
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]
我已经尝试在代码中的不同位置放入time.sleep(),认为它与此有关,但没有运气。我也想知道是否与饼干有关?但不知道,真的......
非常感谢任何帮助!
答案 0 :(得分:0)
你正在排序"对象" (类型为bs4.element.Tag,请参阅https://www.crummy.com/software/BeautifulSoup/bs4/doc/#tag)而不是代码中的字符串,因此您会遇到奇怪的行为。
变化:
<discord.member.Member object at 0x1094b32f0
为:
for entry in sorted(tags):
然后输出:
for entry in tags:
更新以回应评论,如果您需要保留订单尝试类似这样的事情(如果您愿意,可以更多地压缩代码,不需要两个for语句):
[u'APEX INVESTMENT FUND V, L.P.', u'805-2054766781', u'Delaware', u'United States', u'$\xa07,402,178', u'$\xa05,000,000', u'47', u'4', u'28']
[u'APEX INVESTMENT FUND V, L.P.', u'805-2054766781', u'Delaware', u'United States', u'$\xa07,402,178', u'$\xa05,000,000', u'47', u'4', u'28']
[u'APEX INVESTMENT FUND V, L.P.', u'805-2054766781', u'Delaware', u'United States', u'$\xa07,402,178', u'$\xa05,000,000', u'47', u'4', u'28']
[u'APEX INVESTMENT FUND V, L.P.', u'805-2054766781', u'Delaware', u'United States', u'$\xa07,402,178', u'$\xa05,000,000', u'47', u'4', u'28']
[u'APEX INVESTMENT FUND V, L.P.', u'805-2054766781', u'Delaware', u'United States', u'$\xa07,402,178', u'$\xa05,000,000', u'47', u'4', u'28']