2016-03-21 2 views
0

So versuche ich, Florida Statutes von dieser Website zu kratzen: www.leg.state.fl.us/Statutes/Python Web Scraping mit BeautifulSoup, wie komplizierte URL durchlaufen?

Bisher habe ich nur in der Lage, die frist Kapitel zu kratzen: http://www.leg.state.fl.us/Statutes/index.cfm?App_mode=Display_Statute&URL=0000-0099/0001/0001.html.

Ich bemerkte, dass die URL zu "URL = 0000-0099/0002/0002.html" geändert wird. als ich zum nächsten Kapitel springe. Meine Frage ist, wie kann ich so kodieren, dass ich alle Kapitel durchkratzen kann? (Der erste Teil der URL 0000-0099 ist Bereich der Kapitel, so dass dieser Fall wäre es von 1. bis 99. Kapitel sein)

meine Codes sind unten:

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() 

Antwort

0

eine Schleife bilden und verwenden string formatting zu bilden die url:

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 

Dies würde produzieren die folgenden URLs:

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

dank für die schnelle Antwort, Ihr Code Ändern der Reichweite der Kapitel. Ich möchte den Teil 0001/0001 auf 0002/0002 für das zweite Kapitel, 0003/0003 für das dritte Kapitel und so weiter ändern. – CHballer

+0

@TianMa okay, aktualisiert, vorausgesetzt, Sie möchten den Bereich unverändert lassen. – alecxe

+0

danke! es funktionierte. Eine offtopic Frage, wenn ich die Ausgabe in eine txt-Datei schreibe, wie kommt es, meine Ausgabe dreimal mit unterschiedlichem Format auszudrucken? ist es etwas falsch mit meiner "für" Aussage? – CHballer