2017-09-20 10 views
0

私は最近、このコードセグメントをオンラインで見つけました。これはPythonであり、パンダの列挙式を使用しています。Python - Webクロールのためのパンダと列挙の使用

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があなたの例ではもののような同じベースを持っている場合、あなたは

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

を行うだろうこの

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

を行うことができますこれはどう?

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 
関連する問題