ミスチルの大名曲の数々が配信決定!! 31日間無料!!【PR】

ネットから情報を自動的に取得する「スクレイピング」ですが、どのような言語で動作するのでしょうか?
ネットを拝見しますと、phpで「スクレイピング」という記事を見ました。
phpはサーバー上で動作する言語だと思うのですが、仮に動作させようとした場合は、どのような流れで「スクレイピング」を行うのでしょうか?
教えて頂けると助かります。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

>どのような言語


大抵のプログラミング言語でできます。

ウェブページはHTMLなどのコードで構成されています。
スクレイピングはそのコードを取得して、解析することによって情報を得るのです。

言うなれば、この質問ページもHTMLなどのコードをブラウザで解析して表示させているのですが、
スクレイピングは「ある特定の部分を取り出す」ことによって情報を得ます。

例えば添付した画像はこのページのHTMLの一部分ですが、
titleタグに挟まれた部分が、このページのタイトルとなっています。

つまり、タイトルを取得したいなら
HTMLのコードを解析し、titleタグで挟まれた部分を取り出します。
これがスクレイピングです。「パース」するとも言いますね。

では、HTMLからどのようにしてtitleという文字を見つけ出しているのでしょうか?

これは「正規表現」という、文字列のパターンを解析する技術を使います。
titleタグを取得する程度なら簡単ですが、
例えばあるページの電話番号を取得したい場合などにこの「正規表現」が使われます。

またこの正規表現を利用すれば、HTMLの中のURLなどを取り出すことができます。
そうすれば、そのURLのリンク先のページをまたスクレイピングまたはパースすることができます。
そうやって、どんどんリンクを辿って情報を取得することも可能です。
この様な仕組みを「クロール」と呼びます。

グーグルなどの検索エンジン(クローラとも言います)は上記のような仕組みで
ありとあらゆるウェブページの情報を取得しています。

今はスクレイピング等は様々なライブラリが作られていますので、
一から正規表現を書かなくても作ることができます。

以下のような本も何冊か出ているので読んでみてはいかがでしょうか?

http://www.amazon.co.jp/dp/4797380357/
「スクレイピングに適した言語を教えて下さい」の回答画像2
    • good
    • 1
この回答へのお礼

スクレイピングという手法があって、言語は決まっていないのですね。
分かり易い解説もありがとうございます。

お礼日時:2016/03/10 22:26

http://www.amazon.co.jp/s/search-alias=aps&field …
このあたりから本を選んでください。
現在PHPが得意だと言うことでも無い限り、PHPを使う理由は無いです。
「Rubyによるクローラー開発技法」がお勧めです。
    • good
    • 0
この回答へのお礼

参考資料までありがとうございます。Rubyが、クローラーし易い言語ということですね。

お礼日時:2016/03/10 22:27

単純なクロールしたいならwgetで十分だと思いますが

    • good
    • 0
この回答へのお礼

wgetという言語があるんですね、知りませんでした。早い回答ありがとうございます。

お礼日時:2016/03/10 11:15

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qネットの情報を自動収集するプログラムを作りたい。

インターネットでの情報収集を、プログラムで自動的に行いたいと考えています。
この場合、どのような勉強が必要なのか教えていただけませんか。おそらく何通りかの答えがあると思いますが、複数の回答を期待しています。
また、ヒントとなる主なコマンドやキーワードがあれば教えてください。自習の参考にさせていただきます。

プログラム経験は、10年以上前にBASICを多少かじった程度ですが、これを機会に、WEB関連のプログラムをがんばって勉強しようと思います。

Aベストアンサー

ウェブサイトのHTMLを解析してデータを抜き出すことを「スクレイピング」と言います。「引っ掻き取る」という意味。

必要な機能は、
(1)ブラウザのシミュレーション(Form送信やCookie処理など)機能
(2)HTMLを解析する機能

私は、Ruby言語+Mechanize(1の機能)+Nokogiri(2の機能)でやってます。Perlで同じようなことを行うことも出来ます。
「Ruby Mechanize Nokogiri」か「Perl Mechanize」で検索するとサンプルなどがあると思います。

例えば、クレジットカードの利用明細取得サンプル。
http://d.hatena.ne.jp/otn/20090815/p1


他のアプローチとしては、VBとかVBScriptでIEを自動運転する(1の機能)。ただしVBに2の機能のライブラリがあるのかどうか知りません。
IEの自動運転はRubyでも出来るので、Ruby+IE(1)+Nokogiri(2)でも出来ますね。

Qweb上のhtmlファイルから文字データを取得するには

c言語を勉強中の初心者です、
自分が今作りたいプログラムはweb上のhtmlにある文字データを取得し、
整理し、プログラム内で表示するような物ですが、どの本を読んでもweb上からデータを取得する方法が紹介されていません、(見つけられないだけかもしれませんが…)

例えば、yahooの株情報からデータを取得するソフトなんてのはよくありますよね?

こういった方法は何か凄く特殊なのでしょうか?
一般的にこういった事をプログラミング用語で何と呼ぶのかすらわからないので、検索で調べようがありません…

ただweb上のhtmlファイルから文字列を取得したいだけです、
コードの例などを紹介している書籍やwebページを教えてください
よろしくお願いします。

Aベストアンサー

Winsockを使えば出来ますよ。
簡単なものなら「猫でもわかるネットワークプログラミング」を読まれてはどうでしょう?
http://www.amazon.co.jp/dp/4797334797/

ただ、「猫でもわかるネットワークプログラミング」は簡単すぎるので本格的に組むには物足らない恐れもあります。
「C言語によるTCP/IPネットワークプログラミング」
http://www.amazon.co.jp/dp/4894715163/
こっちは、C言語中級者以上じゃないと難しすぎるかも知れませんが。

QMacターミナルで実行中のプログラムを中止するには?

Macのターミナルでプログラムを走らせているとき、
実行中のプログラムを一時停止したり中断・終了させるには
どうしたらいいでしょう?

Unixだと、Control+s とか Control +c とかでできますよね。
Macだと、それではできないみたいなんです。

基本的な質問ですみませんが、どなたか教えていただけないでしょうか。

Aベストアンサー

ごく普通にControl + Cで中断できますよ。

もしかしてControlキーをcommandやcapslockと押し間違えているとかいうことはありませんか?

QInner join と Left joinの明確な違いは?

Inner join と Left joinの違いがよくわかりません。
教えてください。

Aベストアンサー

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
4               NULL
5               NULL
6               NULL
の6レコードが出力されますが、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 INNER JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
の3レコードしか出力されません。

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3           ...続きを読む

Q正規表現でAND検索はできるのでしょうか

正規表現でAND検索はできるのでしょうか?

現在ASPでデータベースのデータを検索しようとしているのですが,検索エンジンみたいに複数の語をスペースで区切って入力して,データを絞り込んで表示したいのです。

OR検索みたいにそれぞれの語を"|"でつなぐというようなやり方があるのでしょうか?
それとも一つ一つの語で検索を繰り返すという方法しかないのでしょうか?

ご存知の方,ご教授ください。

Aベストアンサー

&&でつながれたらいかがですか?

(?=.*stat)(?=.*ate)はAND検索という意味ではありません。
statedのようにstatとateを重複して含む単語にマッチするという意味です。

普通はこんな回りくどいことはせず、
/stat/ && /ate/
で済ませると思います。
(もしくは単純にループでまわしていくとか)


foo.*bar|bar.*foo
も、2語程度までが限界ですよね。
10語分繋げることを考えると気が遠くなります。
(記述も処理時間も)

言語によってはさらに処理を短縮できるような
特有な構文がありますから、調べてみればよろしいかと思います。

Qapt-get install ****** でinstallしたものをuninstallするには?

御世話になります。
vncserverだけをinstallするつもりが
誤って
apt-get install vncとうってしまいました。
これをuninstallしたいのですが
どのようにすればよろしいでしょうか?

教えて下さい。

Aベストアンサー

# apt-get remove パッケージ名
では、設定ファイルは削除されずに残ります。

完全に削除するときは、
# apt-get --purge remove パッケージ名
です。

Q「以降」ってその日も含めますか

10以上だったら10も含める。10未満だったら10は含めない。では10以降は10を含めるのでしょうか?含めないのでしょうか?例えば10日以降にお越しくださいという文があるとします。これは10日も含めるのか、もしくは11日目からのどちらをさしているんでしょうか?自分は10日も含めると思い、今までずっとそのような意味で使ってきましたが実際はどうなんでしょうか?辞書を引いてものってないので疑問に思ってしまいました。

Aベストアンサー

「以」がつけば、以上でも以降でもその時も含みます。

しかし!間違えている人もいるので、きちんと確認したほうがいいです。これって小学校の時に習い以後の教育で多々使われているんすが、小学校以後の勉強をちゃんとしていない人がそのまま勘違いしている場合があります。あ、今の「以後」も当然小学校の時のことも含まれています。

私もにた様な経験があります。美容師さんに「木曜以降でしたらいつでも」といわれたので、じゃあ木曜に。といったら「だから、木曜以降って!聞いてました?木曜は駄目なんですよぉ(怒)。と言われたことがあります。しつこく言いますが、念のため、確認したほうがいいですよ。

「以上以下」と「以外」の説明について他の方が質問していたので、ご覧ください。
http://oshiete1.goo.ne.jp/kotaeru.php3?qid=643134

QSELECT文で、指定カラム以外の全カラムを一括指定って可能でしょうか

SELECT文で、指定カラム以外の全カラムを一括指定って可能でしょうか?
MYSQLサーバのバージョンは5.0.77です。

下記のように「*」を使用して指定テーブルの全カラムを表示する方法がありますが、
SELECT TableName.* FROM TableName

上記の逆で、指定テーブルの指定カラム以外の全カラムを一括指定って可能でしょうか?
例えば下記のような「^」みたいな、又は同等な書き方があれば良いなと思ってまして。
SELECT TableName.^ColumnName1 FROM TableName

ちなみに、下記のように一つ一つ表示したいカラムを指定する方法以外です。
SELECT TableName.ColumnName2 , TableName.ColumnName3 FROM TableName

よろしくお願いします。

Aベストアンサー

ない。
SQL文でそんなことをするより、メソッドとして作ればいいんじゃないですか。
だいたい、それ以外のカラムの数がわからないし、並びも不明だし。

#1に方と同じで
SELECT * from xxxx
なんてのは正気の人間は書きません。
カラムの数も位置も属性もわからないSQL文の結果をどうやって扱うのか。

Qサイトのphpソースコードを表示する方法

参考のためにサイトのphpソースコードを表示する方法を知りたいです。

ある参考書にこのような解説がありました。
『$con = mysql_connect("localhost","sampleID","samplepass");
のようにphp内に直接ユーザ名とパスワードを記載することはいけません。
なぜなら、phpファイルはブラウザからアクセスして見ることができるからです。
対策として、ユーザ名とパスワードを記載したiniファイルを作り、
それをドキュメントルートよりも上位の場所に置くと良いでしょう。』

ブラウザからアクセスして見ることができる、とありますが、
見ることが出来るのは開発担当者達ということでしょうか。

SQLiteのデータベースも同様にドキュメントルートよりも上位の場所に保存
とあるサイトで解説していましたが、専用のソフトとかありますか?

Aベストアンサー

サーバの環境設定や「.htaccess」ファイル等のようなもので間違った設定を行い、
***.phpファイルにアクセスされた場合にPHPとして動作せず
他のHTMLファイルやテキストファイルのようにダウンロード表示されてしまう可能性は多分にあります。
SQLiteのファイルやCSVなんかも、パーミッション等々、正しく設定していなかった場合、簡単にアクセスされてしまいます。

その為、少なくとも、ドキュメントルートより上に直接アクセスされたくないファイルなどを置いて、
require_once, require, include, include_once等によりPHPから参照したりするのが一般的、という事ではないでしょうか。

Q有無、要否、賛否、是非、可否、当否…これらの言葉について

<A>
有無=あるかないか
要否=必要か否か
賛否=賛成と反対
是非=よいことと悪いこと
可否=よいことと悪いこと
当否=正しいか正しくないか。適切かどうか。


1.上記Aのような種類の言葉について、もっと知りたいので
他に何かあれば教えて下さい。

2.Aのような種類の言葉の事を何と呼ぶんでしょうか??

3.Aのような言葉を、どういう風に使えばいいのですか?
例文を示して頂けないでしょうか。

4.「是非」「可否」「当否」の意味は、全部同じですか?
違うとすれば、どのように違うのでしょうか?

Aベストアンサー

使用例

要否=要否を問う

賛否=賛否両論、賛否を問う
是非=是非(良し悪し)を論ずる。 副詞としての用法、是非参加ください。
可否= 可否(良し悪し)を論ずる。可否(賛否)を問う。
当否=ことの当否(よしあし、あたりはずれ)は別として、

是非と可否は同じ意味です。
当否も上の二つと同じ意味があるものの、それが当てはまっているかどうかという意味もあるので全く同じようには使えないでしょう。
二文字で相反する意味を表す漢語独特の表現法ですが、特に名前があるかどうかわかりません。類語として、否応(いやおう)があります。意味は断ることと承知すること。使用例、否応なしに買わされた(無理やりに買わされた)


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング