import pandas as pd
url = 'http://www.example.com'
df = pd.read_html(url)
が上手くいかなったので。
初めは上手く行っていた
import pandas as pd
url = 'https://en.wikipedia.org/wiki/2020_coronavirus_pandemic_in_Italy'
df=pd.read_html(url)
これで表が抽出できたので、pandas
すげーと思って、明日やろうとパソコンを閉じました
次の日
ValueError: invalid literal for int() with base 10: '2;'
となり、エラーしかでない。ここでanacondaの再インストールやっても状況が変わらないので、OSの再インストールを実施。
結果は変わらない
requestsとbeautiful soup
import requests
import pandas as pd
from bs4 import BeautifulSoup
url = 'https://en.wikipedia.org/wiki/2020_coronavirus_pandemic_in_Italy'
res = requests.get(url)
soup = BeautifulSoup(res.content, "lxml")
data=soup.find_all('table', {"wikitable mw-collapsible"})
最終的にはpandas
にお世話になるとして、WEBから情報を得ないと仕方がないので、requestsとBeautiful Soupでスクレイピング
データフレームにならない
df = pd.read_html(data)
これで行けるかと思ったら、TypeError: cannot parse from 'ResultSet'
data
で確認してみると
[<table class="wikitable mw-collapsible" style="float:left; text-align:right; font-size:83%;">
<caption style="font-size:116%"><span class="nowrap">Daily COVID-19 cases in Italy by region ...
とリストっぽい
pd.read_html(data[0])
data[0]
をみると表のHtmlなので上記コマンドをやってみるとTypeError: 'NoneType' object is not callable
なぜ、こうなるのかわからない
ググる
'nonetype' object is not callable pandas read_html
でググるとstackoverflowの結果がでるので、やってみたが、全滅した。リストなのがだめなのか
read_html リスト 抽出
上のキーワードで検索してみてようやく、上手く行く方法をみつけた
https://teratail.com/questions/188717
type(data)
bs4.element.ResultSetなのでそのままread_html
の引数にならなかった(らしい)
できた
import requests
import pandas as pd
from bs4 import BeautifulSoup
url = 'https://en.wikipedia.org/wiki/2020_coronavirus_pandemic_in_Italy'
res = requests.get(url)
soup = BeautifulSoup(res.content, "lxml")
data=soup.find_all('table', {"wikitable mw-collapsible"})
df = pd.read_html(str(data), keep_default_na=False)[0]
df=df.iloc[:,0:28]
df.columns=['Date','VDA','LIG','PIE','LOM','VEN','TN','BZ','FVG','EMR','MAR','TOS','UMB','LAZ','ABR','MOL','CAM','BAS','PUG','CAL','SIC','SAR','ConfirmedNew','ConfirmedTotal','DeathsNew','DeathsTotal','ActiveICU','ActiveTotal']
daf=df[df['Date'].str.contains('^2020')]
daf.to_csv('Splunk_COVID19_Italy.csv', index=False)
https://en.wikipedia.org/wiki/2020_coronavirus_pandemic_in_Italy
にある地域別の表を抽出してCSVまで持って行っている。
df = pd.read_html(str(data), keep_default_na=False)[0]
str
を使用するとstr型に変換してもらえるので、read_html
の引数に使える。
戻りがリストなので、最初の結果を抽出すればいい。
df=df.iloc[:,0:28]
列を最初から28行目としている
daf=df[df['Date'].str.contains('^2020')]
必要な列はDate列が2020から始まるもの
DataFrame型は全体ではstr.contains
が使えないので、列名を指定している。
daf.to_csv('Splunk_COVID19_Italy.csv', index=False)
CSV出力するときindex番号は不要なので削除
見つけてしまった・・・
https://python-forum.io/Thread-table-from-wikipedia
いつも作った後に・・・
もっといい奴
https://qiita.com/Retsuki/items/88eded5e61af200305fb
仕事格好いい
まとめ
SplunkのWebSite Inputが上手くいかず、ググるとpandas
の記事
これは簡単/神とやってみたら、いきなりエラーの山でよくわからない
結果的にできましたが、pythonの道は長いです