BeautifulSoup:在循环中经过一定次数的迭代后,输出开始变化

时间:2017-08-07 15:30:08

标签: python beautifulsoup

我得到了一个问题的回答,我在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(),认为它与此有关,但没有运气。我也想知道是否与饼干有关?但不知道,真的......

非常感谢任何帮助!

1 个答案:

答案 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']