【问题标题】:Not able to get all the links properly无法正确获取所有链接
【发布时间】:2013-08-27 06:16:02
【问题描述】:

我是 python 新手,对代码没有什么困惑。

在下面的代码中,我试图获取一张表的所有链接,这给了我所有的链接,代码是这样的:

import mechanize
from BeautifulSoup import BeautifulSoup
i=0
url = "http://www.miamidade.gov/water/bill_app/bill_expired.asp"
br = mechanize.Browser()
br.open(url)
br.select_form(name="frm")
br["AcctId"] = '8428995632'
br.submit()
for link in br.links(url_regex="ID="):
    print link

现在当我添加一个参数来打印同一页面时,我没有得到之前打印的所有链接以及我想要为所有链接页面打印的数据,下面是代码,这些我添加了额外的行

    billurl = "http://www.miamidade.gov/water/bill_app/"+link.url
    billdata = br.open(billurl)
    html = billdata.read()
    soup1 = BeautifulSoup(html)
    print soup1('font')[0].text[11:]

【问题讨论】:

    标签: python python-2.7 python-3.x beautifulsoup


    【解决方案1】:

    我认为您正在循环基于“br”对象的内部数据成员的列表。但在循环内部,您正在修改“br”对象。所以循环中断了。

    尝试将链接复制到另一个列表中,然后循环遍历该列表。

    【讨论】:

    • 你是什么意思?我无法理解它。你能帮我写代码吗?
    • 我们都给出了相同的答案。或者使用我的 anwser 中的代码,或者首先创建变量,将所有链接分配给该变量。然后在 for 循环中使用该变量(不是 br.links)。
    【解决方案2】:

    你必须用新的机械化实例打开你的新链接:

    import mechanize
    from bs4 import BeautifulSoup
    
    i=0
    url = "http://www.miamidade.gov/water/bill_app/bill_expired.asp"
    br = mechanize.Browser()
    br1 = mechanize.Browser()
    br.open(url)
    br.select_form(name="frm")
    br["AcctId"] = '8428995632'
    br.submit()
    for link in br.links(url_regex="ID="):
        print link
        billurl = "http://www.miamidade.gov/water/bill_app/"+link.url
        billdata = br1.open(billurl)
        html = billdata.read()
        soup1 = BeautifulSoup(html)
        print soup1('font')[0].text[11:]
    

    虽然我在print soup1('font')[0].text[11:] 上收到了IndexError: list index out of range。检查您是否正确抓取网页(当我打开您的脚本输出的链接时,网页为空)


    输出:

    Link(base_url='http://www.miamidade.gov/water/bill_app/BillHistoryLookup.Asp', url='BillDetail.asp?ID=842891990247', text='08-21-2013', tag='a', attrs=[('href', 'BillDetail.asp?ID=842891990247')])
    Link(base_url='http://www.miamidade.gov/water/bill_app/BillHistoryLookup.Asp', url='BillDetail.asp?ID=842892230704', text='07-22-2013', tag='a', attrs=[('href', 'BillDetail.asp?ID=842892230704')])
    Link(base_url='http://www.miamidade.gov/water/bill_app/BillHistoryLookup.Asp', url='BillDetail.asp?ID=842890786086', text='06-20-2013', tag='a', attrs=[('href', 'BillDetail.asp?ID=842890786086')])
    Link(base_url='http://www.miamidade.gov/water/bill_app/BillHistoryLookup.Asp', url='BillDetail.asp?ID=842892747030', text='05-22-2013', tag='a', attrs=[('href', 'BillDetail.asp?ID=842892747030')])
    Link(base_url='http://www.miamidade.gov/water/bill_app/BillHistoryLookup.Asp', url='BillDetail.asp?ID=842899532902', text='04-22-2013', tag='a', attrs=[('href', 'BillDetail.asp?ID=842899532902')])
    Link(base_url='http://www.miamidade.gov/water/bill_app/BillHistoryLookup.Asp', url='BillDetail.asp?ID=842899515711', text='03-21-2013', tag='a', attrs=[('href', 'BillDetail.asp?ID=842899515711')])
    Link(base_url='http://www.miamidade.gov/water/bill_app/BillHistoryLookup.Asp', url='BillDetail.asp?ID=842899587533', text='03-05-2013', tag='a', attrs=[('href', 'BillDetail.asp?ID=842899587533')])
    Link(base_url='http://www.miamidade.gov/water/bill_app/BillHistoryLookup.Asp', url='BillDetail.asp?ID=842899585097', text='01-29-2013', tag='a', attrs=[('href', 'BillDetail.asp?ID=842899585097')])
    Link(base_url='http://www.miamidade.gov/water/bill_app/BillHistoryLookup.Asp', url='BillDetail.asp?ID=842899536357', text='12-20-2012', tag='a', attrs=[('href', 'BillDetail.asp?ID=842899536357')])
    Link(base_url='http://www.miamidade.gov/water/bill_app/BillHistoryLookup.Asp', url='BillDetail.asp?ID=842899543531', text='11-26-2012', tag='a', attrs=[('href', 'BillDetail.asp?ID=842899543531')])
    Link(base_url='http://www.miamidade.gov/water/bill_app/BillHistoryLookup.Asp', url='BillDetail.asp?ID=842899524946', text='10-25-2012', tag='a', attrs=[('href', 'BillDetail.asp?ID=842899524946')])
    Link(base_url='http://www.miamidade.gov/water/bill_app/BillHistoryLookup.Asp', url='BillDetail.asp?ID=842899578848', text='09-21-2012', tag='a', attrs=[('href', 'BillDetail.asp?ID=842899578848')])
    

    【讨论】:

    • 在浏览器中打开链接可以看到数据吗?
    • 我认为这是美丽汤部分的最后两行的问题,如果我们删除它并尝试打印它正确打印的 html
    • 那么你的问题就得到了回答。您现在需要做的就是检查您是否选择了正确的元素。
    • 我也在选择正确的元素。它发生在前 2 个链接而不是其余链接。
    • 我仍然没有得到所有的链接数据。 for 循环只是给我 2 个链接。
    猜你喜欢
    • 2017-04-07
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    相关资源
    最近更新 更多