Webスクレイピング(scraping)とは?
状態:-
閲覧数:1,007
投稿日: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年のウェブスクレイピング事情
Twitter検索結果。「Webスクレイピング」に関する最新ツイート
画像認識に徐々に慣れてきたしもうすぐ概要読み終わるけど次は自然言語処理に行くかWebスクレイピングに行くか… 2022/07/03 00:29
Webスクレイピングをしていた流れでJavaScriptを学び始める等 2022/07/02 20:31
情報収集に困っていませんか?
Webサイトからの情報取得と整理は任せて下さい。
#スクレイピング #情報 2022/07/02 18:58
@nikumannTK Webスクレイピングで試せば 2022/07/01 18:34
webスクレイピング自信マン求む 2022/07/01 18:23
ビジネスに役立つWebスクレイピングに
興味はありますか?
あなたのビジネスに必要な情報が得られます。
#スクレイピング #情報 2022/07/01 12:18
土日でPandas入門動画見終わりたい。
Pandas入門動画見終わったら、Webスクレイピング動画! 2022/07/01 09:05
そういえば、floorpの投稿みて思ったけどDRMってwebスクレイピングも普通にできてしまうしただの幻想よな 2022/06/30 21:25