2013-08-27 138 views
0

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

回答

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 rangeprint 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')]) 
+0

是的網頁是正確的 – user2703389

+0

你可以看到數據,當你打開Web瀏覽器中的鏈接? – ton1c

+0

是的,我可以看到它。 – user2703389

0

我想你遍歷這是基於列表「br」對象的內部數據成員。但在循環內部,您正在修改「br」對象。所以循環中斷。

嘗試將鏈接複製到另一個列表中,並在該列表上循環。

+0

你是什麼意思?我無法理解它。你可以用代碼plz來幫助我。 – user2703389

+1

我們都給出了相同的答案。或者使用我的anwser代碼,或者首先創建變量,將所有鏈接分配給該變量。然後在for循環中使用該變量(而不是br.links)。 – ton1c