2016-12-08 1 views
0

파이썬 초보자가 내 기술을 연습합니다. 나는 도로 덤프를 가로 질러 왔고 도움을받을 수있어서 매우 행복 할 것입니다. 내가하려는 것은 스프레드 시트에서 링크 목록을 얻는 것입니다. 거기에서 파이썬은 데이터를 가져와 특정 클래스를 추출하고 데이터를 ColB에 붙여 넣습니다. 문제는 링크가 끊어진 경우가 있기 때문에 긁힌 데이터가없는 것입니다. 나는이 문제를 해결하기 위해 try와 except를 사용했지만 작동하지 않는 것처럼 보인다. 오류가 발생하면 데이터 쓰기를 건너 뛰고 잘못된 셀에 데이터를 쓰는 것입니다. 여기에 내 코드 :파이썬은 긁기 오류가 발생하여 try와 except를 사용하여 문제를 해결하려고 시도 할 때까지 원활하게 실행되지만 작동하지 않는 것처럼 보입니다.

credentials = ServiceAccountCredentials.from_json_keyfile_name('Te....4e.json', scope) 

gc = gspread.authorize(credentials) 


#selects the spreadsheet 
sh = gc.open_by_url('https://docs.google.com/spreadsheets/d/1u7....0') 


worksheet = sh.worksheet('Keywords') 
colvalue = "A" 
rownumber = 2 
updaterowvalue = 2 

while rownumber <100: 
    try: 
     val = worksheet.acell(colvalue +str(rownumber)).value 
     rownumber += 1 
     url = val  
     #scrape elements 
     response = requests.get(url) 
     soup = BeautifulSoup(response.content, "html.parser") 
     #print titles only 
     h1 = soup.find("h1", class_= "sg-text--headline")  
     updatecolvalue = "B"  
       worksheet.update_acell(updatecolvalue +str(updaterowvalue), h1.get_text()) 
     updaterowvalue +=1 
    except AttributeError: 
     pass 

print('DONE') 

답변

0

내가 주어진 코드가 무효이기 때문에 worksheet.update_acell를 시작하는 줄에 추가 들여 쓰기, 오류가 있다고 가정합니다.

예외가 발생하면 updaterowvalue +=1이 실행되지 않아 결과가 URL과 동기화되지 않게됩니다.

간단히 말하면 updaterowvalue을 사용하지 말고 호출에서 rownumber을 사용하면됩니다. 결과가 URL과 동일한 행에 있기를 원하므로 updaterowvalue은 필요하지 않습니다. 될 루프를 작성

더 파이썬 방법 :

for rownumber in range(2,100): 

당신이 너무 rownumber += 1 라인을 제거 할 수 있습니다.