Help us understand the problem. What is going on with this article?

サクっとWebスクレイピング

More than 1 year has passed since last update.

私個人としてはスクレイピングしたい場面なんてほとんどありませんが、周囲の非エンジニアな人が手作業でコツコツと1,000件近いURLにアクセスして中身を抜き出すということをやってるのを目撃してしまいました。
エンジニアとして見過ごすわけにはいきませんね。

突っ込みますよ!私は!首を!

使い捨てのスクリプトなので細かいことにはこだわりません。
シンプルに時間をかけないことが目標です。

言語選定

使う言語については、vba、vbs、rubyあたり調べてみましたがどうもパっとせず。。。
事前準備的なのが面倒くさいんですよ。
こっちは10分で終わらせたいんです。
却下です。

PHPにとても便利そうなライブラリを発見しましたので採用!
https://sourceforge.net/projects/simplehtmldom/files/
普段jQueryとかで慣れてる人はセレクタに近い感覚でDOM操作ができそうです。
※詳しい使い方はググってください

これで行くことに決めました。

実装

<?php
require 'simple_html_dom.php';
main();

function main() {
    $hoges = file_get_contents('./hogedata.txt');
    $hoges = explode("\r\n",$hoges);
    $base_url = 'https://example.com';
    $path = '/';
    // URLのリストを作ってループしたいだけなので、適宜カスタマイズしてください
    foreach($hoges as $hoge) {
        if( empty($hoge) ) {continue;}
        $url = $base_url . $path . $hoge;
        $scraped_content = scraping($url);
        saveTxt($scraped_content, $hoge);
    }
}

/**
 * URLのソースを取得して必要な部分だけ抜き出す
 */
function scraping($url) {
    $dom = file_get_html($url);

    // 不要な部分は削除
    $dom->find('#abc',0)->outertext = '';
    $dom->find('#xyz',0)->outertext = '';
    // 抽出
    $div_content = $dom->find('#hoge',0)->outertext;

    $dom->clear();
    return $div_content;
}

/**
 * テキストファイルに保存
 */
function saveTxt($txt, $filename) {
    $dir = './src/';
    file_put_contents($dir.$filename.".txt", $txt);
}

うぇーい。

今回は自社サーバへの接続でしたので考慮してませんが、サーバ負荷とか考える必要があったらsleep処理的なのを入れましょう。

sssssumito
Web系の開発してます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away