【Python】なろう作品の「http://」画像の存在をチェックするサンプルコード
非SSL(HTTP)サイトの画像は標準で表示されなくなる
画像設定項目見直しのお願い - 小説家になろうグループ公式ブログ
blog.syosetu.com
昨今、ほとんどのwebサイトでは、よりセキュリティ性の高いSSLに対応していますが、まだ一部では従来の非SSLサイトも存在します。
なので現状ではSSL化されたサイトから非SSLサイトの画像コンテンツを呼び出すことも可能となっていますが、Chromeブラウザにおいてウェブページ上の混在コンテンツを標準でブロックする予定であることが発表されました。
なので従来使えていた「ランキングタグ」や「作者マイページのプロフィール欄」での画像が「一部表示されなくなるかもしれないので各自対応をしてくださいね」というのが、今回のなろう運営からのお知らせとなっています。
対応方法としては、画像引用元のwebサイトがhttpsに対応している場合はURLに「s」を付け足すだけで大丈夫ですが、対応していない場合はimgタグを削除したり、他の場所にアップロードし直したりする必要がありそうです。
しかし大分前に投稿した作品のランキングタグ設定などを忘れている作者さんや、作品数が多くて対応が必要化どうか調べるのが大変という作者さんも多くいると思います。
準備
pip
pip install pandas
pip install requests
pip install beautifulsoup4
サンプルコード
import pandas as pd import requests import time import gzip import json from bs4 import BeautifulSoup ##### ここに作者IDを入力する ###### userid="1272067" ################################## headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0"} cookie = {'over18': 'yes'} # Xサイト用のクッキー all_list=[] def check_novel_img(): novel_data=[] payload = {'out': 'json','gzip':5,'lim':500,'userid':userid} res = requests.get('https://api.syosetu.com/novelapi/api/', params=payload).content r = gzip.decompress(res).decode("utf-8") for data in json.loads(r): try: temp=[] temp.append(data['ncode']) temp.append(data['general_all_no']) temp.append(data['novel_type']) temp.append(data['writer']) novel_data.append(temp) writer_name=data['writer'] except KeyError: pass get_text_all(novel_data,writer_name) def get_text_all(novel_data,writer_name): for i in range(len(novel_data)): if novel_data[i][2]==2: urls = ["https://ncode.syosetu.com/%s/"%novel_data[i][0]] else: urls = ["https://ncode.syosetu.com/%s/"%novel_data[i][0], "https://ncode.syosetu.com/%s/1"%novel_data[i][0]] for url in urls: response = requests.get(url=url, headers=headers, cookies=cookie) html = response.content soup = BeautifulSoup(html, "lxml") imgs = soup.find_all("img") is_http = "大丈夫" for img in imgs: if "http://" in img.get("src"): is_http = "http画像が存在します" temp = [] temp.append(int(userid)) temp.append(writer_name) temp.append(novel_data[i][0]) temp.append(url) temp.append(is_http) all_list.append(temp) time.sleep(1) def check_mypage(): url = "https://mypage.syosetu.com/mypage/top/userid/%s/"%userid response = requests.get(url=url, headers=headers, cookies=cookie) html = response.content soup = BeautifulSoup(html, "lxml") imgs = soup.find_all("img") is_http = "大丈夫" for img in imgs: if "http://" in img.get("src"): is_http = "http画像が存在します" temp = [] temp.append(int(userid)) temp.append("作者マイページ") temp.append("") temp.append(url) temp.append(is_http) all_list.append(temp) time.sleep(1) check_mypage() check_novel_img() df = pd.DataFrame(all_list, columns=["userid","作者名","ncode","掲載URL","http画像の有無"]) df.to_excel('check_http_img.xlsx') print("end")
使い方
userid="1272067"
の箇所に自分の作者IDを入力するだけでOKです。
Pythonコードを実行すると「check_http_img.xlsx」が実行ファイルと同じフォルダに出力されます。
出力例
その他
有名どころでは俺Tueee.Net! Ψ(`∀´)Ψさまは現時点(2019/10/30)でSSL非対応みたいです。
なので俺Tueeeさまの評価pt画像やワードクラウドとか使っている人は修正が必要そうです。
こういうです↓