2017-03-16 4 views
0

저는 학생 저널리스트이며 Python을 처음 사용합니다. 저는 for 루프를 사용하여 대학의 일일 범죄 기록의 모든 현재 페이지에서 개별 범죄 기록을 다 긁는 방법을 알아 내려고 노력했습니다. 그러나 첫 페이지 만 스크랩하고 있습니다. 나는 다른 사람들의 규범과 질문을보고 있었고 실제로 내가 누락 된 것이 무엇인지 알 수 없었다. 어떤 도움을 주셔서 감사합니다. 다른 사람의 예에 따라루프 파이핑과 파이썬을 사용하는 다중 페이지

import urllib.request 
 

 
import requests 
 

 
import csv 
 

 
import bs4 
 

 
import numpy as np 
 

 
import pandas as pd 
 

 
from pandas import DataFrame 
 

 
for num in range(27): #Number of pagers plus 
 
    url = ("http://police.psu.edu/daily-crime-log?field_reported_value[value]&page=0".format(num)) 
 
    r = requests.get(url) 
 

 
source = urllib.request.urlopen(url).read() 
 

 
bs_tree = bs4.BeautifulSoup(source, "lxml") 
 

 
incident_nums = bs_tree.findAll("div", class_="views-field views-field-title") 
 

 
occurred = bs_tree.findAll("div", class_="views-field views-field-field-occurred") 
 

 
reported = bs_tree.findAll("div", class_="views-field views-field-field-reported") 
 

 
incidents = bs_tree.findAll("div", class_="views-field views-field-field-nature-of-incident") 
 

 
offenses = bs_tree.findAll("div", class_="views-field views-field-field-offenses") 
 

 
locations = bs_tree.findAll("div", class_="views-field views-field-field-location") 
 

 
dispositions = bs_tree.findAll("div", class_="views-field views-field-field-case-disposition") 
 

 
allCrimes = pd.DataFrame(columns = ['Incident#', 'Occurred', 'reported', 'nature of incident', 'offenses', 'location', 'disposition']) 
 

 
total = len(incident_nums) 
 

 
count = 0 
 

 
while (count<total): 
 
    incNum = incident_nums[count].find("span", class_="field-content").get_text() 
 
    occr = occurred[count].find("span", class_="field-content").get_text() 
 
    repo = reported[count].find("span", class_="field-content").get_text() 
 
    incNat = incidents[count].find("span", class_="field-content").get_text() 
 
    offe = offenses[count].find("span", class_="field-content").get_text() 
 
    loca = locations[count].find("span", class_="field-content").get_text() 
 
    disp = dispositions[count].find("span", class_="field-content").get_text() 
 
    allCrimes.loc[count] =[incNum, occr, repo, incNat, offe, loca, disp] 
 
    count +=1

답변

1

반드시 나쁜 방법이 아닙니다하지만 당신은 그 물건 당신이 자신감을 얻을 적어도까지 추가로 작동 확인해야합니다. 예를 들어

, 당신은 파이썬이 NUM에서 '2'다음 '9'로 대체 볼

>>> for num in ('29'): 
...  num 
...  
'2' 
'9' 

...에 대한 루프 자체에이를 실행하려고하면. 네가 원하는게 아니야.

내가 귀하의 리드를 따라 가면, 해당 사이트를 검토 한 결과 0 ~ 26 페이지가 있음을 알 수 있습니다. 코드 번호는 for num in range(27)입니다. 제로 초기 값이 이해된다면, 루프는 내가 준 값보다 작은 값으로 간다. URL을 요청하는 문장에서이 정수 값을 문자열 값 (형식)으로 변환해야합니다.

아무 것도 보관하지 않고 루프를 여러 번 통과하십시오! 루프를 돌면서 다른 명령문을 실행하려면 들여 쓰기가 필요합니다 (또는 코드를 제출할 때 이런 일이 발생할 수 있습니다).

이 후 나는 당신이하고있는 일이 명확하지 않다.