Webスクレイピングした結果をテキストファイルへ書き出してみたいと思います。
Webスクレイピングした結果をファイルに書き出す方法!
以前、指定したURL内の内部リンクを取得する方法について書いたので、その結果をテキストファイルへ書き出そうと思います。
手前の手順が気になる場合は上記記事をご確認ください。
サンプルコード
# BeautifulSoupをインポート
import requests
from bs4 import BeautifulSoup
#「手っ取り早くPython3.xをダウンロードして使ってみる(Mac)!はじめてのPython」のURLを指定
url = "https://programmer-life.work/python/use-python3-mac"
# ページのHTML(ソース)を取得
html = requests.get(url)
# BeautifulSoupで解析(=parser)
soup = BeautifulSoup(html.content, "html.parser")
# テキストファイルへ結果を書き込み
# 書き込むファイルを指定
fileName = "test.txt"
# ファイルを開く
with open(fileName, "a") as f:
for element in soup.find_all("a"):
url = str(element.get("href"))
f.write(url+"\n")
元データでは結果は print(url)でshellへ表示していましたが、with open()でテキストを開いた後にwrite()を使ってテキストに書き込んでいきます。
write()では「url+”\n”」として 改行=\n するようにしています。カンマ「 , 」にしてcsvで取り込む場合もあるかもしれないですね。
with open()にはオプションがあり以下のようになっています。
with open() オプション
with open(“ファイル名”, “w”) # w は上書き
with open(“ファイル名”, “a”) # a はファイルがなければ新規作成、あれば末尾に追加
with open(“ファイル名”, “x”) # x はファイルがなければ新規作成、あればエラー
※ open()で書く方法もありますが、その場合は書き込み後にclose()で開いたテキストを閉じる必要があります。
close()を忘れてしまう可能性もあるのと扱いやすいのでここではwith open()を使っています。
write() argument must be str, not Noneがでた
url = str(element.get(“href”))の部分は初めurl = element.get(“href”)としていましたが、このままだと「write() argument must be str, not None」がでました。
引数は文字列じゃないとダメですよ、と怒られているのでstr()で文字列に変換しています。hrefって文字列じゃないのかなと思いましたが、途中までは書き込まれていたので空データが混じっていたのかなと、回避できてよかった。
おわり
Javaとかに比べると簡単に書き出せてしまって驚いています。やっぱPythonってすごいですね。
もっといろいろ書き出してデータ解析とかできるようになりたいものです。先は長そうですね。
参考
テキストファイルへ書き込む
Pythonでopenしたものは必ずcloseの必要がありますか?