質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

解決済

JavascriptのWebサイトをスクレイピングしたい

KohnoseLami
KohnoseLami

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

1回答

-2評価

0クリップ

755閲覧

投稿2020/06/05 18:30

編集2022/01/12 10:58

前提・実現したいこと

テキストファイル内のURL一覧を一行ずつ参照しサイトにアクセスして、そのサイト内に設定した文字列が存在する場合にのみにURL一覧をテキストファイル形式で出力したい。

発生している問題・エラーメッセージ

スクレイピング対象URLがJavascriptで見事に動作しませんでした。

該当のソースコード

Python3

import requests from time import time from threading import Thread import sys from bs4 import BeautifulSoup #コマンドライン引数 USAGE: $python check_url.py [input_file] args = sys.argv if len(args)==2: input_file = args[1] else: input_file ="list.txt" #デフォルト #キーワード設定 keywords_list=["データが見つかりませんでした"] #結果を入れるリスト logs= [] urls_404 = [] urls_504 = [] urls_accept = [] def check_url(target_url): try: req = requests.get(target_url) logs.append(str(req.status_code)+"\t"+target_url) if req.status_code == 404: urls_404.append(target_url) elif req.status_code == 504: urls_504.append(target_url) elif req.status_code == 200: html = BeautifulSoup(req.text, "html.parser") #print(str(html)) title = html.find("title").text #<title>~</title>の文字列 body = html.find("body").text #<body>~</body>の文字列 for keyword in keywords_list: if keyword in body: # キーワードがbodyに含まれているか判定 urls_accept.append(target_url) break except requests.exceptions.ConnectTimeout: print('タイムアウトしました') logs.append("TIMEOUT"+"\t"+target_url) start = time() with open(input_file) as f: urls = f.read().splitlines() threads = [] for url in urls: thread = Thread(target=check_url, args=(url,)) thread.start() threads.append(thread) for thread in threads: thread.join() print("\n".join(logs)) with open("log.txt", "w") as f: f.write("\n".join(logs)) with open("404.txt", "w") as f: f.write("\n".join(urls_404)) with open("504.txt", "w") as f: f.write("\n".join(urls_504)) with open("output.txt", "w") as f: f.write("\n".join(urls_accept)) print(time() - start)

試したこと

Javascriptでのスクレイピングで少し調べたのですがSeleniumでのスクレイピングで実際のブラウザを使用する方法が出てきたのですがこれでは結果が出るまでにかなり遅そうでなおかつとても動作が重そうでしたのでまだ何も試せていない状況です。
調べるURLの総数がかなり多いため速度を重視させたいです。
もしbs4などの軽い動作でなおかつ速度が出せるものがあれば教えてほしいです。
また、もしよければなのですがSeleniumを使用した場合、Selenium以外に便利なのがある場合などはそちらに対応化させたソースコードを提供していただけるととても助かります。

補足情報(FW/ツールのバージョンなど)

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。