2017-09-20 7 views
0

그래서 최근에 파이썬에있는이 코드 세그먼트를 온라인으로 발견했으며 팬더에 열거 식을 사용합니다.Python - 웹 크롤링을 위해 팬더 및 열거 사용

import pandas as pd 
url = 'http://myurl.com/mypage/' 

for i, df in enumerate(pd.read_html(url)): 
    df.to_csv('myfile_%s.csv' % i) 

가 하나의 URL이 아닌 웹 페이지의 목록을 가서 하나의 .csv 파일로 각 페이지의 테이블에서 모든 정보를 넣을 수 있도록이를 다시 작성하는 방법이 있나요? 내 주요 추측은 for 루프와 같은 somelike입니다.

url_base = 'http://myurl.com/mypage/' 
count = 1 
for i in range(1,5): 

    url = '%s%s' %(url_base,count) 

    for i, df in enumerate(pd.read_html(url)): 
     df.to_csv('myfile_%s.csv' % i) 
    count = count + 1 
+0

두 개의 루프에서 모두 변수로 'i'가 있습니다. 그건 가능하지만 피하지. –

답변

0

모든 CSV를가 같은 열이있는 경우 URL이 귀하의 예제에있는 것과 같은 동일한 기본이있는 경우이

pd.concat([pd.read_html(url) for url in urls], ignore_index=True) 

, 당신이 할 것 할 수

url_base = 'http://myurl.com/mypage/{}' 
df = pd.concat([pd.read_html(base.format(i)) for i in range(num)], ignore_index=True) 
df.to_csv('alldata.csv') 
+0

이것은 현재 코드에서 어디로 갈 것입니까? 또는 코드 자체 세그먼트입니까? – Leggerless

+0

그것은 모든 코드를 대체합니다. 실제 예를 들어 보려고하십니까? –

0

이건 어때?

import pandas as pd 
from concurrent import futures 

urls = [your list of urls] 

def read_html(url): 
    return pd.read_html(url) 

with futures.ThreadPoolExecutor(max_workers=6) as executor: 
    fetched_urls = dict((executor.submit(read_html, url), url) 
         for url in urls) 

nums = range(1, len(fetched_url)+1) 

for future, num in zip(futures.as_completed(fetched_urls), nums): 
    if future.result(): 
     future.result().to_csv('myfile_{}.csv'.format(num), index=False) 
    elif future.exception(): 
     print '{} yielded no results'.format(fetched_urls[future]) 
    else: 
     pass