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

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

新規登録して質問してみよう
ただいま回答率
85.50%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

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

Q&A

解決済

2回答

2994閲覧

phpQueryでHTML要素を取得する方法と気をつけること

minarai_SE

総合スコア29

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

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

0グッド

0クリップ

投稿2018/10/23 13:55

編集2018/10/23 14:01

よろしくお願いします。

見よう見まねで、Webスクレイピングをやろうとしているところです。
ネットで調べるうち、phpQueryというものが容易だと見たので試みています。
このphpQueryを使ってあるサイトから必要な情報だけを抜き出したいのですが、わからないことが2つあります。

require_once("phpQuery-onefile.php"); $url = "https://○○○○"; $html = file_get_contents($url); $msg="今回の課題名は、"; $msg = $msg . phpQuery::newDocument($html)->find(".title")->text() ."です。そして、リーダーは、"; $msg = $msg . phpQuery::newDocument($html)->find(".leader")->text() ."です。そして、副リーダーは、"; $msg = $msg . phpQuery::newDocument($html)->find(".subleader")->text() ."です"; echo $msg;

上記のように書いたのですが、目的通り、クラス名から、課題名とリーダー名、副リーダー名の情報を取得することができました。

Q1)
ここで教えていただきたいのですが、上記の場合、対象サイトには、1度だけ情報を取りに行っていると考えていいのでしょうか?
自分の手でブラウザを操作して移動したりするのでなく、こういうスクリプトを通じて他のサイトの情報を取得する場合、相手のサーバーに負担をかけると法に触れることもあるので頻度に気をつけるべし聞きました。上記のコードを実行するには1秒もかかってない感じなのですが、3度も取得しに行っているとすると、よくないかと思うんです。
いかがでしょうか?

Q2)

<table summary="役割分担表"> <tbody> <tr><td>担当部署:</td><td>第3営業チーム</td><td></td></tr> <tr><td>のべ担当者数:</td><td>(25人)</td><td></td></tr> <tr><td>進捗管理担当者:</td><td><a href="○○○○">システム管理課長</a></td><td></td></tr> <tr>……

対象のHTMLがこのような形で記述されている場合の、「第3営業チーム」「25人」「システム管理課長」をそれぞれ取得したいのですが、どう書けばいいのでしょうか?クラス名を通じての取得しかわからず、困っています。
「html全体を最初から見ていって、”担当部署”という文字があったらその次のtdの内容」みたいな指示の仕方かと思うのですが。

以上2点、よろしくお願いいたします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

方向性が全く違う質問はわけていただけると。
なぜなら「解決済み」とするには「全てに回答しなければならない」という印象を与え、回答の敷居が高くなって回答が得られにくくなります。

私見です。

Q1

相手のサーバーに負担をかけると法に触れることもあるので頻度に気をつけるべし聞きました。上記のコードを実行するには1秒もかかってない感じなのですが、3度も取得しに行っているとすると、よくないかと思うんです。

回数の問題ではないです。
法に「何回までならOKよ」というのはありません。
もちろん「見つからなかったらOK」でもありません。
相手方のサーバーの利用規約に禁止事項として書かれていたら否応なしにアウトです。
もしその1回の通信を何千人か同時にしたら・・・?極論ですが置きえない話ではないですよね。
利用規約に謳われていなかったとしても、慎重には慎重を期して、相手方に許可を得てから行うのがトラブルなくて済みます。

Q2
完全に丸投げです。
phpQuery利用を決めたのでしたら、phpQueryのマニュアルや機能をきちんと確認してまずは自分なりにやってみてください。
思うところは何となくありそうですし、思うとおりに組んでみて、そこで想定通りできていないところや起きた問題を以て質問してください。

投稿2018/10/23 14:50

m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

質問の方法も内容もよくなかったようです。

多くのサイトを検索して調べてきましたが、スクレイピングの違法性は、基本的には「相手のサーバーに障害を与えたか」「相手の動作に悪影響を及ぼしたか」がまず基準とされるようなので、情報を取得しにいく側として一律に許容程度を定められることではないようですね。
過去に事件化した例では、サーバー側の脆さも一因だったり、逮捕された人も不起訴とされたそうで、有罪判決が出てないという点から、事件の評価は多様なようでした。ただ、「相手のサーバーがどれくらい頑丈なのかわからない以上、自分のスクレイピングの悪質さもわからない」というリスクの認識は多くの人たちで共有されているようでした。

いずれにしろ、素人は手を出さない方がよいようだ、と自分で結論づけました。

また、質問方法のどこが「完全に」丸投げなのか理解に苦しみますが、これについても今後は試行錯誤の過程も質問に盛り込むようにしたほうがよいようだと、考えることにしました。

投稿2018/10/25 15:45

minarai_SE

総合スコア29

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/10/25 21:34

~したい。どうしたらいい? は丸投げです。 ~したい。自分なりに調べてまずは試してみてこういう風にしてみた。だけど想定の結果が得られない。どうしたらいい? と質問すべきということです。 (「この辺までは想定通りにできてそうだけど」、と、想定通りできていないことに対してデバッグしてなんとなくでも問題の切り分けができていればなおよし) https://teratail.com/help/question-tips 回答の後半にも書いてますね。「~~だと思うけど」と何かしら想定している手順や手法があるのでしたら、まずその通りやってみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問