2016-03-21 14 views
0

Bu yüzden bu web sitesinden Florida Tüzüğünü kazımak çalışıyorum: BeautifulSoup kullanarak Python web kazıma, karmaşık URL ile döngü nasıl?

www.leg.state.fl.us/Statutes/

Şimdiye kadar frist bölüm kazımak verebiliyoruz vardır: http://www.leg.state.fl.us/Statutes/index.cfm?App_mode=Display_Statute&URL=0000-0099/0001/0001.html.

URL'nin "URL = 0000-0099/0002/0002.html" olarak değiştirildiğini fark ettim. Bir sonraki bölüme geçerken. Sorum şu: Bütün bölümleri kazıyarak nasıl kodlayabilirim? (URL 0000-0099 ilk bölümü bölümden aralığı, bu nedenle bu durumda o 99 bölüme 1 ila olurdu)

benim kodları aşağıdaki gibidir:

from bs4 import BeautifulSoup 
import urllib2 

f = open('C:\Python27\projects\outflieFS_final.txt','w') 

def First_part(url): 
    thepage = urllib2.urlopen(url) 
    soupdata = BeautifulSoup(thepage,'html.parser') 
    return soupdata 

soup = First_part("http://www.leg.state.fl.us/statutes/index.cfm?App_mode=Display_Statute&URL=0000-0099/0001/0001.html") 

tableContents = soup.find('div', {'id': 'statutes' }) 

for data in tableContents.findAll('div'): 
    data = data.text.encode("utf-8","ignore") 
    data = str(data)+ "\n\n" 
    f.write(data) 
f.close() 

cevap

0

bir döngü yapın ve string formatting kullanmak

base_url = "http://www.leg.state.fl.us/Statutes/index.cfm?App_mode=Display_Statute&URL=0000-0099/00{chapter:02d}/00{chapter:02d}.html" 
for chapter in range(1, 100): 
    url = base_url.format(chapter=chapter) 
    print(url) 
    # make a request and parse the page 

Bu aşağıdaki URL'ler üretecektir: hızlı cevap için

http://www.leg.state.fl.us/Statutes/index.cfm?App_mode=Display_Statute&URL=0000-0099/0001/0001.html 
http://www.leg.state.fl.us/Statutes/index.cfm?App_mode=Display_Statute&URL=0000-0099/0002/0002.html 
... 
http://www.leg.state.fl.us/Statutes/index.cfm?App_mode=Display_Statute&URL=0000-0099/0098/0098.html 
http://www.leg.state.fl.us/Statutes/index.cfm?App_mode=Display_Statute&URL=0000-0099/0099/0099.html 
+0

sayesinde, kodunuz edilir url oluşturmak bölümlerin aralığını değiştirmek. İkinci bölüm için 0001/0001 ila 0002/0002, üçüncü bölüm için 0003/0003 kısmını değiştirmek istiyorum. – CHballer

+0

@TianMa tamam, güncellenmiş, aralığını olduğu gibi bırakmak istediğiniz varsayılarak. – alecxe

+0

teşekkürler! işe yaradı. Bir dış kaynaklı soru, çıktıyı bir txt dosyasına yazdığımda, çıkışımı üç kez farklı formatta nasıl yazdıracağım? "for" ifademde bir sorun mu var? – CHballer