Webスクレイピング

検索エンジンクローラ

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

 状態:-  閲覧数:1,983  投稿日: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.正規表現を使う方法

 閲覧数:367 投稿日: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を使う方法

 閲覧数:367 投稿日: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を使う方法

 閲覧数:360 投稿日: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を使う方法

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

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

PHP Simple HTML DOM Parser


PHPライブラリ

PHP3.phpQueryを使う方法

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

PHP3.phpQueryを使う方法




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


JS1.cheerioを使う方法


クローリング

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