Ich versuche, Daten von dieser Website zu kratzen: Death Row Informationschaben Text von Webseiten mit Python 2.7
Ich habe Probleme mit den letzten Aussagen von allen ausgeführten Täter in der Liste zu kratzen, weil die letzte Aussage ist befindet sich auf einer anderen HTML-Seite. Der Name der URL ist wie folgt aufgebaut: http://www.tdcj.state.tx.us/death_row/dr_info/[lastname][firstname].html. Ich kann mir keinen Weg vorstellen, wie ich die letzten Aussagen dieser Seiten abkratzen und in eine SQLite-Datenbank stellen kann.
Alle anderen Informationen (erwarten für "Täter Informationen", die ich nicht brauche) ist bereits in meiner Datenbank.
Wer kann mir einen Zeiger geben, um in Python damit anzufangen?
Dank
Edit2: Ich weiter ein wenig bekam:
import sqlite3
import csv
import re
import urllib2
from urllib2 import Request, urlopen, URLError
from BeautifulSoup import BeautifulSoup
import requests
import string
URLS = []
Lastwords = {}
conn = sqlite3.connect('prison.sqlite')
conn.text_factory = str
cur = conn.cursor()
# Make some fresh tables using executescript()
cur.execute("DROP TABLE IF EXISTS prison")
cur.execute("CREATE TABLE Prison (link1 text, link2 text,Execution text, LastName text, Firstname text, TDCJNumber text, Age integer, date text, race text, county text)")
conn.commit()
csvfile = open("prisonfile.csv","rb")
creader = csv.reader(csvfile, delimiter = ",")
for t in creader:
cur.execute('INSERT INTO Prison VALUES (?,?,?,?,?,?,?,?,?,?)', t,)
for column in cur.execute("SELECT LastName, Firstname FROM prison"):
lastname = column[0].lower()
firstname = column[1].lower()
name = lastname+firstname
CleanName = name.translate(None, ",[email protected]'#$" "")
CleanName2 = CleanName.replace(" ", "")
Url = "http://www.tdcj.state.tx.us/death_row/dr_info/"
Link = Url+CleanName2+"last.html"
URLS.append(Link)
for URL in URLS:
try:
page = urllib2.urlopen(URL)
except URLError, e:
if e.code ==404:
continue
soup = BeautifulSoup(page.read())
statements = soup.findAll ('p',{ "class" : "Last Statement:" })
print statements
csvfile.close()
conn.commit()
conn.close()
Der Code ist etwas chaotisch, ich weiß. Sobald alles funktioniert, werde ich es aufräumen. Ein Problem allerdings. Ich versuche, alle Aussagen mit soup.findall zu bekommen, aber ich kann nicht scheinen, die Klasse richtig zu machen. Der relevante Teil der Seite Quelle sieht wie folgt aus:
<p class="text_bold">Last Statement:</p>
<p>I don't have anything to say, you can proceed Warden Jones.</p>
jedoch die Ausgabe von meinem Programm:
[]
[]
[]
... Was genau das Problem sein könnte?
Was ist das Problem genau? Die "letzten Statements" vom anderen Seiteninhalt trennen? –
John Gordon: Nun, die Aussagen sind nicht in einer Tabelle. Überprüfen Sie diesen Link zum Beispiel: http://www.tdcj.state.tx.us/death_row/dr_info/vargakevinlast.html Ich verstehe nicht, wie man die letzten Aussagen jeder dieser Seiten ergreift. – Omnicron
Sie könnten nach
Letzte Anweisung:
'suchen und dann die folgenden''... –