2017-11-07 2 views
-2
import requests 
from bs4 import BeautifulSoup 
import csv 

url='https://stackoverflow.com/users' 
response= requests.get(url) 
html=response.content 

soup= BeautifulSoup(html, 'html.parser') 

divs= soup.find_all("div", class_='container') 

with open('stackdata.csv', 'a') as csv_file: 
    writer=csv.writer(csv_file) 
    for div in divs: 
     print(div.text) 
     name_box=soup.find('div', attrs={'class': 'user-details'}) 
     name=name_box.text 
     print(name) 
     writer.writerow([name]) 

div.text를 사용하면 모든 데이터가 인쇄되지만 해당 데이터를 CSV 파일에 쓰고 싶을 때 하나의 상위 데이터 만 기록합니다.스택 오버플로 사용자 데이터 덮어 쓰기

+0

인쇄하면 결과가 하나만 나타납니다. 이것은 csv 파일이 업데이트되는 것입니다. – SIM

답변

1

나는 이것이 당신이 당신의 스크레이퍼가 어떻게 행동하길 원하는지 생각합니다. 실행하여 데이터가 채워진 CSV 파일을 찾습니다.

import requests 
from bs4 import BeautifulSoup 
import csv 

response = requests.get('https://stackoverflow.com/users').text 
soup = BeautifulSoup(response, 'lxml') 
for items in soup.select('.user-details'): 
    name = items.select("a")[0].text 
    location = items.select(".user-location")[0].text 
    reputation = items.select(".reputation-score")[0].text 
    print(name,location,reputation) 

    with open('stackdata.csv','a',newline='') as csv_file: 
     writer = csv.writer(csv_file) 
     writer.writerow([name,location,reputation]) 
+0

감사합니다 Shahin 제대로 작동 –

+0

모든 세부 사항은 하나의 단일 열에 어떻게 세 가지 다른 열로 스트립에 온다. –

+0

수정 된 코드를 참조하십시오. 이제는 개별 열의 각 필드를 갖게됩니다. – SIM