无法正确获取所有链接

时间:2013-08-27 06:16:02

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

我是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:]

2 个答案:

答案 0 :(得分:0)

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

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:]

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


输出:

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')])

答案 1 :(得分:0)

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

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