月別アーカイブ: 2019年3月

Seleniumでブラウザを開く

Seleniumで簡単なスクレイピングをします。今回はブラウザを開くだけです。

”Selenium” とはブラウザの試験をしたり動作を自動化するライブラリです。

普通に”Selenium”を使うとブラウザが開いて動きます。

”ヘッダーレス”という技を使うと表示せずにスクレイピングやブラウザを動かすことができます。

準備
1.Selenium のインストール
  pip install selenium
2.Chromeのウェブドライバーダウンロード
  pip install chromedriver-binary
動作させると、Chrome のバージョンが違う的エラーが出ました。
ドライバーが最新の74でブラウザが73だったからです。

でもChromeのヘルプを見ると”最新です”のようなメッセージが出ます。
実際は、ほんの1週間前に74のベータ版が出たようでした。
対策としてはエラーに出たURLから、ブラウザに会うバージョンの実行プログラムをダウンロードしてプログラム上で実行しました。


今回はこの記事のあるページを開いてスクリーンショットを取りました。

以下が、Selenium でのブラウザを開く簡単なプログラムです。

===========================

#import chromedriver_binary*コメントアウト
from selenium import webdriver
#URL設定
url = “https://www.excite.co.jp/news/article/Cobs_1890436/”
# ヘッドレスモードにする
options = webdriver.ChromeOptions()
options.add_argument(‘-headless’)
# Chrome起動(ダウンロードして変更)
browser = webdriver.Chrome(executable_path= r”d:\driver\Chromedriver.exe”,options=options)
# URL読込
browser.get(url)
# スクリ-ンショット保存
browser.save_screenshot(“website.png”)
# 終了
browser.quit()

===================

下記が抽出したスクリーンショットです。

ジャパニーズイングリッシュ

Youtubeの動画見ていて思ったので書いときます。

Python のライブラリーの事を下記のように言っていた。

Scrapy=”スクラピー”(Skurapy?)、Tensorflow=”テンソル”(Tensol?)

これが標準ですか?

スクラピーはまだわかるが、テンソルって聞いたときは、”ビルヂング”って書いたビルがあるビルを思い出した。

ジャパニーズイングリッシュがいっぱいで、翻訳とか外人さんと話す時に結構混乱する。

とある知事さんみたいに日本語でいいのに、カタカナばかり使うのも嫌だ。

 

 

 

WEBスクレイピングとクレンジング by Python パート2

今回は前回のスクレイピングに無駄な部分を取り除くクレンジングを付け加えて頻出語句を図示化するWORDCLOUDを追加しました。

開発実行環境: Windows10 +Python 3.6.5+ visual studio code

#Wordcloud 画像作成部分

def WordCheck(texts , num):
    #windowsの場合Utf-8 を変換しないとエラーになります。
    b= texts.encode(“CP932″,”ignore”)
    wc = WordCloud(background_color=”white” ,\
    font_path= r”d:\fonts\noto\NotoSansCJKjp-Regular.otf”,\
    width=800,height=600).generate(texts)
    wc.to_file(“d:\wordcloud_”+ str(num) +”.png”)

 

#ヘッダの偽装(これもしておかないと”urlOpen”でエラーになる)
ua = ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) ‘\
‘AppleWebKit/537.36 (KHTML, like Gecko) ‘\
‘Chrome/55.0.2883.95 Safari/537.36 ‘

 

#リンクURLの取得部分

↓フッタ部分のリンク項目”<A href>”を削除する。

for script in soup([‘script’,’style’,’a’,’img’]):
script.decompose()

 

頻出文字の図形化

左(クレンジング前)=>右(クレンジング後)

フッタのリンク、”Art”,”Video”が消えた。

 

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”)
#====================================================