Webスクレイピング(scraping)とは?
状態:-
閲覧数:2,108
投稿日:2017-03-02
更新日:2017-04-26
Webページへアクセスして、そのHTMLから必要なデータを抽出する処理
・WebページのHTMLを解析(parse)してデータを抽出
・取得したHTMLから任意の情報を抽出する技術・行為
・Webページ(1ページ全体)に対して処理を行う
・スパイダー(spider)とも呼ばれる
作業の流れ
・1. 対象Webサイトをクローリング
・2. 「クローリングしたHTML」からタイトルや記事本文をスクレイピング
A.正規表現を使う方法
B.XPathを使う方法
Python1.Beautiful Soupを使う方法
PHP1.Goutteを使う方法
PHP2.PHP Simple HTML DOM Parserを使う方法
PHP3.phpQueryを使う方法
JS1.cheerioを使う方法
・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.正規表現を使う方法
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を使う方法
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を使う方法
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を使う方法
Goutte
PHPライブラリ
・PHPのWebスクレイピング・ライブラリ「Goutte」と「phpQuery」を比較してみた
・PHPでHTMLをパースして解析する簡単な方法
・Goutteでスクレイピングする際、「サイト単位」指定や「何階層まで」の指定はできる?
PHP2.PHP Simple HTML DOM Parserを使う方法
PHP3.phpQueryを使う方法
JS1.cheerioを使う方法
JS1.cheerioを使う方法
・Node.js用のスクレイピングモジュール「cheerio-httpcli」の紹介
・Node.jsのスクレイピングモジュール「cheerio-httpcli」が第3形態に進化したようです
・くだらないAPIなんていらないよ – 2016年のウェブスクレイピング事情