BeautifulSoupで東証一部の会社をかき集める 〜Python〜
BeautifulSoupを使って、ウェブサイトからスクレイピングし、東証一部の会社を全てcsvファイルに書き込みます。
なぜこんなことをするかというと、株を売買するさいの会社選びを楽にするためです。
私は、東証一部に上場している会社の株しか買わないので、CSVファイルにまとめておくと、あとはそこから条件で絞り込んだりするだけで済むので楽なのです。
前置きはさておき、今回はこちらのウェブサイトをスクレイピングします。
www.jpubb.com
このサイトを見てみるとわかるとおり、だいたい2000近くの企業が東証一部に上場しています。
このサイトでは、2000の企業を40ページに分けて掲載しているようです。
とりあえず、BeautifulSoupをインポートします。
urllibは、URLを読み込む際に使用するので、合わせてインポートします。
pandasは、読み込んだウェブサイトの内容を保存するために使用します。
ま、わからなくてもあとで解説するので、とりあえずインポートしときましょう笑
from bs4 import BeautifulSoup from urllib.request import urlopen import pandas as pd
このサイトのURLの構造なのですが、いたってシンプルで、
http://www.jpubb.com/list/list.php?se=tou1&pageID= + ページ番号
となっています。
例えば、
http://www.jpubb.com/list/list.php?se=tou1&pageID=5
これで5ページ目が表示されます。
なので、for文でページ番号分ぶん回して、ページ内容をとってくることにしました。
とってきたページに載っている会社の「証券コード」と「企業名」を、codeとnameのリストに入れています。
code = [] name = [] for page in range(1,41): url = "http://www.jpubb.com/list/list.php?se=tou1&pageID=" + str(page) #ページURL + ページ番号 html = urlopen(url) #urllibのurlopenを使って、URLを読み込む soup = BeautifulSoup(html, "lxml") #BeautifulSoupでHTMLを読み込む for i in soup.find_all("td", class_="code"): #証券コードをcode=[]に入れる code.append(i.string) for o in soup.find_all("td", class_="name"): #企業名をname=[]に入れる name.append(o.string)
これで、40ページ分の証券コードと企業名がリストに入りました。
なので、これをpandasのDataFrameの形式で保存します。
DataFrame形式にすることでCSVファイルにしやすくなります。
df = pd.DataFrame({"name":name, "code":code})
保存したデータの内容はこんな感じです。
仕上げに先ほどDataFrameに保存した内容をCSVファイルに書き込みます。
df.to_csv("tosho1.csv", header=False, index=False)
保存したCSVファイルはこんな感じになっていると思います。
ソースコードをまとめて貼っておきます。
from bs4 import BeautifulSoup from urllib.request import urlopen import pandas as pd code = [] name = [] for page in range(1,3): url = "http://www.jpubb.com/list/list.php?se=tou1&pageID=" + str(page) html = urlopen(url) soup = BeautifulSoup(html, "lxml") for i in soup.find_all("td", class_="code"): code.append(i.string) for o in soup.find_all("td", class_="name"): name.append(o.string) df = pd.DataFrame({"name":name, "code":code}) print(df) df.to_csv("tosho1_fake.csv", header=False, index=False)
とりえあず、今回はここまでです。
私はこのファイルに売買高や1株の価格などを追加して、ソートしています。
あとは個人個人、自由にやっていただければ、って感じですね!