Webスクレイピング

検索エンジンクローラ

Webスクレイピング(scraping)とは?

 状態:-  閲覧数:1,007  投稿日:2017-03-02  更新日:2017-04-26  
Webページへアクセスして、そのHTMLから必要なデータを抽出する処理
・WebページのHTMLを解析(parse)してデータを抽出
・取得したHTMLから任意の情報を抽出する技術・行為
・Webページ(1ページ全体)に対して処理を行う
・スパイダー(spider)とも呼ばれる

作業の流れ
・1. 対象Webサイトをクローリング
・2. 「クローリングしたHTML」からタイトルや記事本文をスクレイピング


スクレイピングをする7つの方法


A.正規表現を使う方法
B.XPathを使う方法
Python1.Beautiful Soupを使う方法
PHP1.Goutteを使う方法
PHP2.PHP Simple HTML DOM Parserを使う方法
PHP3.phpQueryを使う方法
JS1.cheerioを使う方法

A.正規表現を使う方法

 閲覧数:247 投稿日:2017-03-02 更新日:2017-03-02 

A.正規表現を使う方法


Pythonで正規表現を使う時はreモジュールを使用
・要素を指定して、値を抽出


コード例


▼HTML
<html>
 <head>
   <meta charset='utf-8' />
 </head>
 <body>
   <h1>クローリングとスクレイピング</h1>
   <div id="articleInfo">
     <p>
       <span class="timestamp">2017-3-2 21:15:35</span>
       <span class="author"><a href="http://programming-term.w4c.work/">プログラミング用語</a></span>
     </p>
   </div>
   <div id="articleText">
     ウェブサイトのクローリングとスクレイピングについて  

   </div>
 </body>
</html>


▼Python
#coding: utf-8
import re

#変数htmlには上記のHTMLがstrで代入されているとします。
#変数title, timestamp, author, author_link, bodyにそれぞれタイトル、投稿日時、著者、著者のリンク、記事本文が代入されます。

title = re.compile('\<h1\>(.+?)\<\/h1\>', re.MULTILINE|re.DOTALL).findall(html)[0]
timestamp = re.compile('\<div id="articleInfo"\>.+?\<span class="timestamp"\>(.+?)\<\/span\>', re.MULTILINE|re.DOTALL).findall(html)[0]
author_link, author = re.compile('\<div id="articleInfo"\>.+?\<span class="author"\>\<a href="(.+?)"\>(.+?)\<\/a\>\<\/span\>', re.MULTILINE|re.DOTALL).findall(html)[0]
body = re.compile('\<div id="articleText"\>(.+?)\<\/div\>', re.MULTILINE|re.DOTALL).findall(html)[0]


B.XPathを使う方法

 閲覧数:244 投稿日:2017-03-02 更新日:2017-03-02 

XPath


XML形式の文書の要素を指定する言語

Chromeブラウザを使用して「任意のHTML要素のXPath」を確認する手順
・1.要素の検証
・2.Elementsタブの任意の要素を右クリック
・3.Copy XPath でXPathを取得

PythonでXPathを使う時はlxmlモジュールを使用
・ 要素を指定して、値を抽出


コード例


▼HTML
<html>
 <head>
   <meta charset='utf-8' />
 </head>
 <body>
   <h1>クローリングとスクレイピング</h1>
   <div id="articleInfo">
     <p>
       <span class="timestamp">2017-3-2 21:15:35</span>
       <span class="author"><a href="http://programming-term.w4c.work/">プログラミング用語</a></span>
     </p>
   </div>
   <div id="articleText">
     ウェブサイトのクローリングとスクレイピングについて  

   </div>
 </body>
</html>


▼Python
#coding: utf-8
import urllib2
import lxml.html

#変数htmlには上記のHTMLがstrで代入されているとします。
dom = lxml.html.fromstring(html)

#変数title, timestamp, author, author_link, bodyにそれぞれタイトル、投稿日時、著者、著者のリンク、記事本文が代入されます。
title = dom.xpath('//h1')[0].text
timestamp = dom.xpath('//*[@id="articleInfo"]//*[@class="timestamp"]')[0].text
author = dom.xpath ('//*[@id="articleInfo"]//*[@class="author"]/a')[0].text
author_link = dom.xpath ('//*[@id="articleInfo"]//*[@class="author"]/a')[0].attrib['href']
body = dom.xpath('//*[@id="articleText"]')[0].text


Python1.Beautiful Soupを使う方法

 閲覧数:246 投稿日:2017-03-02 更新日:2017-03-02 

Beautiful Soup


Pythonモジュール
・HTMLを構文解析して要素の指定を手助けしてくれる
・要素を指定して、値を抽出


コード例


▼HTML
<html>
 <head>
   <meta charset='utf-8' />
 </head>
 <body>
   <h1>クローリングとスクレイピング</h1>
   <div id="articleInfo">
     <p>
       <span class="timestamp">2017-3-2 21:15:35</span>
       <span class="author"><a href="http://programming-term.w4c.work/">プログラミング用語</a></span>
     </p>
   </div>
   <div id="articleText">
     ウェブサイトのクローリングとスクレイピングについて  

   </div>
 </body>
</html>


▼Python
#coding: utf-8
from bs4 import BeautifulSoup
from datetime import datetime

#変数htmlには上記のHTMLがstrで代入されているとします。
soup = BeautifulSoup(html)

#変数title, timestamp, author, author_link, bodyにそれぞれタイトル、投稿日時、著者、著者のリンク、記事本文が代入されます。
title = soup.h1.find(text=True)
timestamp = soup.find(id='articleInfo').find(class_='timestamp').find(text=True)
author = soup.find(id='articleInfo').find(class_='author').find('a').find(text=True)
author_link = soup.find(id='articleInfo').find(class_='author').find('a').get('href')
body = soup.find(id='articleText').find(text=True)


PHP1.Goutteを使う方法

 閲覧数:229 投稿日:2017-03-02 更新日:2017-03-03 

Goutte


PHPライブラリ


PHPのWebスクレイピング・ライブラリ「Goutte」と「phpQuery」を比較してみた
PHPでHTMLをパースして解析する簡単な方法


Goutteでスクレイピングする際、「サイト単位」指定や「何階層まで」の指定はできる?


PHP2.PHP Simple HTML DOM Parserを使う方法

 閲覧数:250 投稿日:2017-03-02 更新日:2017-03-02 

PHP Simple HTML DOM Parser


PHPライブラリ

PHP3.phpQueryを使う方法

 閲覧数:225 投稿日:2017-03-03 更新日:2017-03-03 

PHP3.phpQueryを使う方法




phpQueryでWEBスクレイピングしてみた


JS1.cheerioを使う方法

Twitter検索結果。「Webスクレイピング」に関する最新ツイート

ぺろーちぇ☀FF14 @peroucheperouch
きょくちょ @9yo9tyo
QJ(ジャイロでいきます) @LomSmash

クローリング

コメント投稿(ログインが必要)



週間人気ページランキング / 6-26 → 7-2
順位 ページタイトル抜粋 アクセス数
1 ベクトル | 数学 | プログラミング用語 268
1 curl | HTTPクライアント(ネットワーク) | プログラミング用語 268
2 ルーター | ネットワーク | プログラミング用語 267
3 Flash Video | コンテナフォーマット | プログラミング用語 265
4 正規表現 | プログラミング | プログラミング用語 261
5 デーモン | Linux | プログラミング用語 258
6 ユースケース | 開発 | プログラミング用語 237
7 チェックアウト | バージョン管理システム(開発) | プログラミング用語 158
8 YouTube | API | プログラミング用語 128
9 Linux | プログラミング用語 45
10 PowerShell | スクリプト | プログラミング用語 44
11 可搬性 | プログラミング | プログラミング用語 33
12 クローラ | 検索エンジン | プログラミング用語 25
13 Subversion | バージョン管理システム(開発) | プログラミング用語 23
14 アンチパターン | プログラミング | プログラミング用語 11
15 プログラミング用語 9
16 deflate | ネットワーク | プログラミング用語 8
17 Nginx / Nginxとは?/ Apacheとの違い | プログラミング用語 6
17 YouTubeに掲載されている動画を、ユーザーが作成したWebサービス上で再生する方法 | プログラミング用語 6
17 WebLogic | アプリケーションサーバ(サーバ) | プログラミング用語 6
2022/7/3 1:01 更新