2016-10-21 1 views
-1

: Death Row Information스크랩 텍스트 사용하여 파이썬 나는이 웹 사이트에서 데이터를 긁어하기 위해 노력하고있어 2.7

내가 마지막 문장이기 때문에 목록에있는 모든 실행 된 범죄자의 마지막 문을 긁어하는 데 문제 다른 HTML 페이지에 있습니다. URL의 이름은 다음과 같이 작성됩니다. http://www.tdcj.state.tx.us/death_row/dr_info/[lastname][firstname].html. 이 페이지에서 마지막 문장을 긁어서 Sqlite 데이터베이스에 저장하는 방법을 생각할 수 없습니다.

다른 모든 정보 (필자가 필요로하지 않는 "위반자 정보"가 예상 됨)는 이미 내 데이터베이스에 있습니다.

파이썬에서이 작업을 수행하기위한 포인터를 얻을 수있는 사람은 누구입니까?

감사

Edit2가 :

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

코드는 지저분하다, 내가 아는 : 내가 더 조금 얻었다. 모든 것이 작동하면 나는 그것을 정리할 것입니다. 하나의 문제. 나는 soup을 사용하여 모든 진술을 얻으려고 노력하고 있습니다. findall,하지만 나는 수업을 제대로 못하는 것 같습니다. 페이지 소스의 관련 부분은 다음과 같습니다

<p class="text_bold">Last Statement:</p> 
<p>I don't have anything to say, you can proceed Warden Jones.</p> 

을하지만, 내 프로그램의 출력 :

[] 
[] 
[] 

... 가 정확히 무슨 문제가 될 수 있습니까?

+0

은, 정확히 문제가 무엇입니까? "마지막 문장"을 다른 페이지 내용과 분리 하시겠습니까? –

+0

존 고든 : 글쎄요, 진술은 테이블에 없습니다. 예 : http://www.tdcj.state.tx.us/death_row/dr_info/vargakevinlast.html이 링크를 확인하십시오. 각 페이지의 마지막 문장을 가져 오는 방법을 모르겠습니다. – Omnicron

+0

'

마지막 성명서 :

'을 찾아서 다음 내용을 얻을 수 있습니다. '

'... –

답변

0

나는 문제를 해결하는 코드를 작성하지 않습니다,하지만 당신은 그것을 자신을 수행하는 방법에 대한 간단한 계획을 줄 것이다 :

각 마지막 문이 URL에있는 것을 알고

http://www.tdcj.state.tx.us/death_row/dr_info/[lastname][firstname]last.html 

당신은 이미 다른 모든 정보를 가지고 있다고 말합니다. 이것은 아마도 처형 된 수감자 목록을 포함합니다. 따라서 파이썬 코드에서 이름 목록을 생성해야합니다. 이렇게하면 도착해야하는 각 페이지로 이동하기위한 URL을 생성 할 수 있습니다.

위의 형식을 사용하여 각 URL을 반복하는 For 루프를 만듭니다.

이 for 루프의 본문 내에서 페이지를 읽고 마지막 문장을 가져 오는 코드를 작성하십시오. 각 페이지의 마지막 문장은 각 페이지에서 동일한 형식으로되어 있습니다, 그래서 당신은 당신이 원하는 부분을 캡처 구문 분석을 사용할 수 있습니다 : 당신이 마지막 문장의 목록을 일단

<p class="text_bold">Last Statement:</p> 
<p>D.J., Laurie, Dr. Wheat, about all I can say is goodbye, and for all the rest of you, although you don&rsquo;t forgive me for my transgressions, I forgive yours against me. I am ready to begin my journey and that&rsquo;s all I have to say.</p> 

, 당신은 SQL에 밀어 수 있습니다 .

그래서 코드는 다음과 같이 표시됩니다

import urllib2 
# Make a list of names ('Last1First1','Last2First2','Last3First3',...) 
names = #some_call_to_your_database 
# Make a list of URLs to each inmate's last words page 
# ('URL...Last1First1last.html',URL...Last2First2last.html,...) 
URLS =() # made from the 'names' list above 

# Create a dictionary to hold all the last words: 
LastWords = {} 

# Iterate over each individual page 
for eachURL in URLS: 
    response = urllib2.urlopen(eachURL) 
    html = response.read() 
    ## Some prisoners had no last words, so those URLs will 404. 
    if ...: # Handle those 404s here 

    ## Code to parse the response, hunting specifically 
    ## for the code block I mentioned above. Once you have the 
    ## last words as a string, save to dictionary: 
    LastWords['LastFirst'] = "LastFirst's last words." 



# Now LastWords is a dictionary with all the last words! 
# Write some more code to push the content of LastWords 
# to your SQL database. 
+0

멋집니다! 그것을 들여다 볼 것입니다. 감사! – Omnicron

+0

행운을 빈다! 도움이된다면 upvote하십시오! 당신이가는대로 당신의 코드 샘플과 함께 더 구체적인 질문을 게시하십시오. – Cinghiale

+0

하지만, 내 평판은 너무 공개에 표시하기에는 낮습니다 :) – Omnicron

관련 문제