Python によるWEBスクレイピング テキストのみ抽出(HTML除去)

前回はタイトルとMETAタグの表示まででした。
今回はトップページとそれにリンクしてるページのタグを除いたテキストのみを抽出してみました。
変更点:
1.HTNMLパース、CSVファイルライブラリの追加
下記 import を追加
==================
from urllib.parse import urljoin
from bs4 import  Comment
import csv
===================
2.書き込みファイルをオープンする。
3.comment , script ,style href タグ部分削除
4.テキストを抽出する。
5.CSVファイルに書き出す
6.エラーが出て止まるので例外処理を追加した。(認証要求サイトにて発生)
次回は、認証サイトでの認証処理処と分析です。

====================================
*以下前回分から変更した部分のみ
#Get LINks
soup = BeautifulSoup(html, ‘html.parser’) #(*1)
url_items = soup.select(‘li’)
#FILe setting(*2)
file_path = “webscraping.csv”
csv_file = open(file_path, ‘wt’, newline = ”, encoding = ‘utf-8’)

 

for url2 in url_items:
try:
#初期化
csv_data = []
csv_write = csv.writer(csv_file)
a = url2.a
if a isnotNone:
url3 = a.attrs[“href”]
url4 = urljoin(url, url3)
print(url4)
res = urllib.request.urlopen(url4)
soup = BeautifulSoup(res, ‘html.parser’)
#Tite
title1 = soup.find(‘title’)
print(“Title = “, title1)
#Header
header=soup.find(“head”)
#description
description = header.find(“meta”, attrs={“name”: “description”})
#Keyword
keywords=header.find(“meta”, attrs={“name”: “keywords”})
print(“詳細 = “, description)
print(“Keyword = “, keywords)
#タイトル_詳細_keyword_追加
csv_data.append(title1)
csv_data.append(description)
csv_data.append(keywords)
csv_write.writerow(csv_data)
# コメントタグの除去
for comment in soup(text=lambda x: isinstance(x, Comment)):
comment.extract()
# scriptタグの除去
for script in soup([‘script’,’style’]):
script.decompose()
# テキストだけの抽出
for text in soup.find_all(text=True):
#初期化
csv_data = []
if text.strip():
print(text)
#Contents add
csv_data.append(text)
csv_write.writerow(csv_data)
except urllib.error.HTTPError as e:
print(e.code) # 404など
#Close
csv_file.close()
##===================================================
print(“end”)
#====================================================