PHPでwebスクレイピング

前記事:pythonでwebスクレイピング

pythonに挫折した僕はPHPでスクレイピングする。
別にそこまでMGSの情報が欲しいわけでもなかったのだけど。

使い慣れた「simple_html_dom」使う。処理が重たい以外の欠点がない。
というか処理が重いからPython使ってみたかったところもあるが。

ともかく、クッキー渡したことないのでそこをやる。
スクレイピングをしてみよう 認証・リダイレクト回避編(http://www.lesson5.info/?p=203)を参考に進める。

内容は理解してないけど、書いてある通りやって解決↓

<?php
include __DIR__."/function/simple_html_dom.php";

$item_url = 'https://www.mgstage.com/search/cSearch.php?search_word=&sort=new&list_cnt=30&range=latest&type=top';

$opts = array(
'http'=>array(
'method' => 'GET',
'header' => 
"Referer: https://www.mgstage.com\r\n". // リファラーをセット
"Cookie: adc=1\r\n") );// 認証のクッキーの名前が「adc」で値が「1」
$context = stream_context_create($opts);
$html = file_get_html($item_url, false, $context);

foreach ($html->find('div') as $entry) {
echo $entry;
}
?>

あとはなんやかんやしてXMLに出力。
レンサバのCRON設定で1日1日くらい更新させておく。
エクセルとかに出力して分析するとかならPythonが便利そうではあるけど、レンサバでただただ情報を自動更新させときたいならPHPの方が良い気がする。
というかレンサバ=ウェブサイト=PHPの相性が良い。

pythonでwebスクレイピング

pythonでwebスクレイピングする。
最終目標はMGSの新着動画ページ(https://www.mgstage.com/search/cSearch.php?search_word=&sort=new&list_cnt=30&range=latest&type=top)をスクレイピングしようと思う。

まずスクレイピングの基礎から。

python3でwebスクレイピング(Beautiful Soup)(https://qiita.com/mtskhs/items/edf7dbba9b0b0246ef8f)
を参考にこのサイトをスクレイピングしてみる。

 
import requests
from bs4 import BeautifulSoup

url ="http://hytool.org/"
response = requests.get(url)
soup = BeautifulSoup(response.content, 'lxml')

print(soup)

これで、このサイトの「doctype html」から「/html」までの全てのソースコートが取得できる。

find~を指定すると取得する値をタグ等で指定できる。

 
# タグで取得
print (soup.find_all("h1"))
print (soup.find_all("a"))
print (soup.find_all("img"))

クッションページを回避してスクレイピング

MGSは年齢認証のクッションページがあるため、上記のコードではクッションページのスクレイピングをしてしまう。

Pythonで年齢認証などのクッションページを回避してスクレイピングしたい(https://qiita.com/aizakku_nidaa/items/71829aa111be68843b8b)
を参考にやってみる。
どうやらクッキーを渡せば良いらしい。

クッキーは【Chrome】Cookieを確認する方法(https://coeure.co.jp/blog/pc_support/chrome_cookie_180208)で調べる。
クッキー消したりして年齢認証のクッキーを特定↓

参考サイトと同じクッキーだった。
書いた人もMGSのスクレイピングしてたのだろうか。

 
import requests
from bs4 import BeautifulSoup

url = 'https://www.mgstage.com/search/cSearch.php?search_word=&sort=new&list_cnt=30&range=latest&type=top'

cookie = {'adc': '1'}  # 名前:コンテンツ

soup = BeautifulSoup(requests.get(url, cookies=cookie).content, 'lxml')

print(soup)

xmlに書き込む

取得できたのでxmlにする。
①BeautifulSoupで値を取得
②ループ処理
③XMLファイルへの書き込み
するあと細々とした調整。
課題?
・タイムスタンプがタイムゾーン含んだ形式にしたい
・XML用エスケープをreplaceで処理したけど、他のやり方がありそうな気がする。
・XMLの作成が強引な気がする。JSONのデコード方法はググって出たけど、XMLはないのか?

 
import requests
from bs4 import BeautifulSoup
import datetime
dt_now = datetime.datetime.now()
print(dt_now)

url = 'https://www.mgstage.com/search/cSearch.php?search_word=&sort=new&list_cnt=30&range=latest&type=top'

cookie = {'adc':'1'} #名前:コンテンツ

soup = BeautifulSoup(requests.get(url, cookies=cookie).content, 'lxml')

rank_list = soup.find('div', class_="rank_list") #soupからrank_listのみ指定
rank_list_li = rank_list.find_all('li') #rank_listから全てのliを指定
item_xml = '' #not definedエラー避け

for oisii_soup in rank_list_li: #for 変数名 in 繰り返し条件:→「rank_list_li」の数だけ繰り返し処理

	title = oisii_soup.find('p', class_="title lineclamp") #タイトル取得
	title = title.get_text() #テキストのみ
	title = title.replace('&', '&')#XML用エスケープ
	print(title)
	
	img = oisii_soup.h5.img['src'] #画像URL取得
	print(img)

	href = oisii_soup.h5.a['href'] #リンクURL取得
	link = "https://www.mgstage.com/"+href #パス追加
	print(link)

	item_xml_temp = "		<item>\n		<title>"+title+"</title>\n		<link>"+link+"</link>\n		<pubDate>2020-11-22T12:07:00+09:00</pubDate>\n		<description><![CDATA[<a href='"+link+"'><img src='"+img+"'></a>]]></description>\n		</item>\n\n"
	item_xml = item_xml + item_xml_temp
	
before_xml = "<?xml version='1.0' encoding='UTF-8' ?>\n<rss version='2.0'>\n<channel>\n	<title>MGS新着動画のRSSフィード</title>\n	<link>https://www.mgstage.com</link>\n	<description>MGS新着動画のRSSフィード</description>\n	<lastBuildDate>2020-11-22T12:36:02+09:00</lastBuildDate>\n	<language>ja</language>\n"
after_xml = '</channel>\n</rss>'
merge_xml = before_xml+item_xml+after_xml

f = open('test.xml','w') #出力(w=上書き/a=追記)
f.write(merge_xml)
f.close()

レンタルサーバーで動かす

……挫折。
スターサーバーで動かそうとしたけど、上手く行かなかった。

 
#!/usr/bin/python3.6
print ('Content-Type: text/html\n\n')
print ("Hello world!")

.pyのままだとコードがそのまま表示されて、
拡張子を.cgiに変えると、500エラー。

そもそもレンサバ上にPythonの実行環境があるのかないのかよくわからん。Python3.6.xが入ってて、コマンドパスが「/usr/bin/python3.6」らしい。できそうな気はするのだけど……なぜ動かない?
「putty」でSSL接続したらローカルのコマンドプロンプトみたいな感じで動くっぽい?みたいな情報で試してみたけど、タイムアウトで接続できなかった。

PHPみたいにCRONで定期作動させようと思ってたけど、よくわからん。というかスクレイピングしたあとの情報を再度ネットに返す使い方は一般的ではないのか?イマイチ情報が少ない気がする。
やはりWEBサイトに出力するならPHPの方が使いやすいか。

→続き:PHPでwebスクレイピング

話題のディープフェイク

偽動画「ディープフェイク」のリンク先掲載 容疑のまとめサイト運営者ら逮捕
 人工知能(AI)で作成された女性芸能人の架空アダルト動画を閲覧できるURLを自身が運営するまとめサイトに掲載したとして、警視庁と千葉県警の合同捜査本部は名誉毀損(きそん)の疑いで、男3人を逮捕した。警視庁によると、AIの顔認証技術を悪用した精巧な偽動画「ディープフェイク」が社会問題化する中、まとめサイト運営者を逮捕したのは全国で初めて。

デープフェイクが話題。
気になって見てみたけど、思ったよりすごかった。
特に同じAVから、石原さとみFAKEと、新垣結衣FAKEが作られてるのがあって、見比べると凄さが分かる。どっちも本物っぽく見える。

ただ一つ残念なのが、テレビ観てない弊害で有名人がわからないこと。

同人誌楽しむためにアニメ見る現象はオタクあるあるだけど、
DEEPFAKE楽しむためにテレビ見る現象が流行るかもしれない。

一番ビビったのはBOWのゼルダ姫のディープフェイク。
一瞬笑ったけど、技術的には一番すごい気がする。
しかしもこれがいけるなら、3DのVTuberとかも応用できそう。

包容力VS多様性

『ABEMA Prime』最近良く見てる。
『露出症』の回が面白かった。でなんとなく思ったこと。

露出症含め精神疾患とかLGBT、人種だとかの少数派、多様性が保護されがちな最近の流行りがあるなぁと。
で、そういうものに対して包容力を求められている気がする。

自分は「少数派=弱い者」を助ける、許容する、のが正義だとする倫理観は持っている。
小学校教育とかアンパンマンの影響で、強い者が弱い者を助ける、のが格好良い。倫理的にも良いことだと思っている。
今でも、勧善懲悪のなろう系とか好きで良く読んでる。

で、現実世界の話。
障害者だとか老人とかを「助ける」。まぁ助けるまで積極的ではないにしても、そういう人に迷惑かけられても「許容する」。みたいなことがある。
今までそれを迷惑は迷惑だけど、ちょっとイイコトした。許容できる自分偉い。くらいの認識を持っていたけど、なんとなく最近それが変わりつつある。「偉い」より「迷惑」に思う気持ちが大きくなってきてる。

原因は自分の中の「弱い者」の該当範囲が広がってて、なんかもう全部じゃんみたいな気分になるからかなと。「弱い者」が優遇されててズルい。みたいな。
今まで自分にとっての「弱い者」といえば「腰の曲がった老人」とか「足がなくて車椅子の障害者」とか明らかな弱い人だけだったけど、「露出症」とかの精神障害者を自分の認識の「弱い人」の範囲に含めるのか迷う。

他にも『発達障害グレー』の回もあったけど、かつては「仕事のできない人」、「空気の読めない人」、だったのが世間的に障害者の枠になってきてるのを感じる。
使えない人間は殺せばいいという『優生思想』は行き過ぎだけど、なんでも許容しなければいけない『多様性優先思想』もなんだかなぁと思う。

『失笑恐怖症』も広く言えば精神疾患の話。

精神的に弱い人、障害を抱えている人が、社会に認識されてきてて、それが「社会的な弱者」にはなりつつあるのかなと思う。

自分は心身がある程度健康(比較的には強者の立場)なので、そういう傾向が損に感じることが多いけど、恩恵も受けている場面もある。
一番の恩恵は「一般労働者(弱者)」なので「使用者(強者)」からのパワハラとかサビ残とかから守られる傾向はありがたい。

強いから便利に利用される。そんな勇者のなろう系あったなぁ。

逸れたけど、「弱者」の自分を線引を考えたい。
うーん。まぁ結局、理由と結果のバランスだよな。
「精神障害者が人を殺したら許すか?」といえば許さないし、
「老人がレジでモタモタしてたら許すか?」といえば許す。

他は……
「露出症」→関わらない
「失笑恐怖症」→関わらない
「発達障害の同僚」→許容せざるを得ない
「精神障害者が電車で騒いでいたら」→関わらない
「小汚いホームレス」→関わらない

自分の理想は「強くて、全てを許容できるでっけぇ心持ちの人間」でありたいと思っているけど、そうもいかない。
結局アンパンマンにはなれないのだという事実を再確認させられる。
というか自分の対処がほぼほぼ関わらないなの笑える。

なんだろうな。まぁ自分の理想は理想だけど、
現実、他人を助けれるほど強くはないし、
損得で考えるのが一番しっくりくるんだよなぁ

ということを加味すると、
「多様性を重んじる包容力のある人間を装いつつ、自分の弱い部分をさらけ出して、弱者には頼られないように、強者には寄生する。」
そんな人間に私はなりたい。

読んだ本【2020年11月】

9巻。
面白い。

1-3巻。
食べて強くなるチート。

1-4巻。
チートハーレム。

1巻。
なんだかよく分からん。

1-3巻。
料理のない世界への転生チート。

1巻。
なろう系。不遇な奴隷が救われていく系。
続き気になって原作読む。(https://ncode.syosetu.com/n5619fv/)159話まで。
サクサク進んで楽しい。信長の野望。

1巻。
追放系。悲壮ない。
追放系ってスタートの悲壮感大事だな。初めからチートすぎて、好きに生きろやみたいな気分になる。

2巻。
人類と敵対。みんなハッピーじゃなくて、人類滅ぼしたら面白いな。

1-2巻。
ご都合主義に理由がある……のか?若干の匂わせ。

1巻。

1-8巻。
面白い。色々紙一重が過ぎる。

1巻。
二度転生したにしては、知能が低すぎる。

1-2巻。
好き。魔王の秘密とか勇者の思惑とか気になる。

1-3巻。
なろう系。シリアスというかピンチ多め。

1巻。
なろう系。世界観と言うか、設定がよくわからん。

1巻。
なろう系。文明レベルがイマイチわかりにくい。

なろう系。
そこそこ。幸せとは。

1巻。
なろう系。割と好き。

1-2巻。
教室転移なろう系。序盤の暗さはイマイチだったけど、チート始まってからは意外と好き。

1-2巻。
なろう系?無双できそうでできないのが良い塩梅。

1巻。
新鮮な感じで、結構好き。

1巻。
なろう系。イマイチ。

1-3巻。
なろう系。チート感が足りない。

1-5巻。
なろう系。まずまず。
一人ぼっちではない。

TerraTech【ゲーム】

Steamゲーム。
面白かった。
キャンペーンモードをプレイ。
序盤はゾンビアタックを繰り返して、ミッションをこなしていく。
拾ったパーツを試して行くのが楽しかった。バリアとか、ストレージとか、初めて入手したときが感動的。
wikiとか手本とかは見ずに自分なりのマシンを作ってくのが楽しい気がする。
車に不満はないけど、ホバー、飛行機が操縦しづらさのイライラがすごい。上手く作ったら操作性良いのだろうか。
全企業開放までプレイ。30時間くらい。

マジカミ【ゲーム】

DMMのブラウザゲーム。
ちょっとやってた。

メインストーリーの第1部までクリアー。
ゲームシステムがストーリーに落とし込んであって、なるほどなーと感心した。

ちょっと前までCMキャンペーンで毎日ガチャ引けて楽しかったが、
逆にキャンペーン終わるとログインの意欲が失せてきてしまった。