2017-07-20 2 views
0

以下のコードで何が問題なのですか?それは1日だけからデータを取得します。しかし、ウェブページは動的ウェブデータベースであり、何年ものデータを含んでいる。私は、2013年から2016年まで毎月のデータを掻き集めて、CSVファイルに保存する必要があります。Pythonでの動的Webデータベースの削り取り

import calendar 
import requests 
from bs4 import BeautifulSoup 

cal = calendar.Calendar() 

base_url = 'http://www.pse.pl/index.php?modul=21&id_rap=24&data=2016' 
month_url = '&Month=' 
day_url = '&Day=' 

for year in range(2015, 2017): 
    for month in range(1, 13): 
     monthdays = [d for d in cal.itermonthdays(year, month) if d != 0] 
     for day in monthdays: 
      r = requests.get(base_url + str(year) + month_url + str(month) + day_url + str(day)) 
      soup = BeautifulSoup(r.text,'lxml') 
      findtable = soup.find('table',{'id':'tabela'}) 
      for i in findtable.findAll('tr'): 
       for j in i.findAll('td'): 
        print (j.text) 

答えて

0

私が気づいた主な事は、あなたがサイトに送るURLの日付が異なっていなければならないということです。日付の要素(年、月、日)の間にハイフンが必要です。私はまた、日中を移動する簡単な方法を提案することもできます。

矢印は、日付を処理するためのモジュールです。この場合、2015年1月1日から2015年1月3日までの範囲の日数を生成するために使用します。

これらの日付の書式設定にも使用します。

私はBeautifulSoupを使用してテーブルを見つけてから、テーブルの内容をデータフレームに抽出するためにパンダを使用します。最後に、これらのデータフレームをcsvファイルに書き出します。

>>> import requests 
>>> import arrow 
>>> import bs4 
>>> from datetime import datetime 
>>> import pandas as pd 
>>> start = arrow.get(datetime(2015,1,1)) 
>>> end = arrow.get(datetime(2015,1,3)) 
>>> base_url = 'http://www.pse.pl/index.php?modul=21&id_rap=24&data=' 
>>> for day in arrow.Arrow.range('day', start, end): 
...  page = requests.get(base_url+day.format('YYYY-MM-DD')).content 
...  soup = bs4.BeautifulSoup(page, 'lxml') 
...  table = soup.find('table' ,{'id':'tabela'}) 
...  df = pd.read_html(str(table)) 
...  df[0].to_csv(day.format('YYYY-MM-DD')+'.csv') 
+0

ありがとうございました。私は自分のコードを変更したのが好きです。私はそれがどのように機能するのか理解していると思います私は、あなたがおそらく解決する方法を知っているかもしれないさらなる問題の下に加えました。 – taumar

+0

@taumar:これは別の質問としてお願いします。 (あなたがそうする時に私に知らせてください。他に誰もいなければ私は答えを提供します)。おそらく、ここの本当のパンダの専門家はあなたよりもずっと良い答えを私に与えることができます。 –

0

BeautifulSoupでサイトを「クリック」することはできません。

1)部位と相互作用するseleniumモジュールも見てみよう。この場合

は、私は2つのオプションを参照してください。リンクは、このようなスタイルである

2)注意:

http://www.pse.pl/index.php?modul=21&id_rap=24&data=2017-07-19。ここでは一部をInteretsingすると、ベースリンクの末尾に、具体的な日付を渡しループを構築し、requestsと、このようなリンクのそれぞれを開くことができます&データ= 2017年7月19日

です。そして構文解析はさらに進んでいきます。

関連する問題