PythonWebスクレイピング-データ抽出
Webページを分析することは、その構造を理解することを意味します。さて、なぜそれがウェブスクレイピングにとって重要なのかという疑問が生じます。この章では、これを詳しく理解しましょう。
Webページ分析
Webページの分析は重要です。分析しないと、抽出後にそのWebページから(構造化または非構造化)データを受信する形式を知ることができないためです。次の方法でWebページ分析を行うことができます-
ページソースの表示
これは、ソースコードを調べることにより、Webページがどのように構成されているかを理解する方法です。これを実装するには、ページを右クリックしてから、を選択する必要がありますView page sourceオプション。次に、そのWebページから関心のあるデータをHTML形式で取得します。しかし、主な関心事は、私たちがフォーマットするのが難しい空白とフォーマットについてです。
[要素の検査]オプションをクリックしてページソースを検査する
これは、Webページを分析する別の方法です。ただし、違いは、Webページのソースコードのフォーマットと空白の問題が解決されることです。これを実装するには、右クリックしてからInspect または Inspect elementメニューからのオプション。そのWebページの特定の領域または要素に関する情報を提供します。
Webページからデータを抽出するさまざまな方法
以下の方法は、主にWebページからデータを抽出するために使用されます-
正規表現
これらは、Pythonに組み込まれた高度に専門化されたプログラミング言語です。使用できますrePythonのモジュール。REまたは正規表現または正規表現パターンとも呼ばれます。正規表現の助けを借りて、データから照合したい文字列の可能なセットに対していくつかのルールを指定できます。
一般的な正規表現について詳しく知りたい場合は、リンクにアクセスしてください https://www.tutorialspoint.com/automata_theory/regular_expressions.htmまた、Pythonでのreモジュールまたは正規表現について詳しく知りたい場合は、リンクhttps://www.tutorialspoint.com/python/python_reg_expressions.htmをたどることができ ます。
例
次の例では、インドに関するデータをスクレイピングします。 http://example.webscraping.com 正規表現を使用して<td>の内容を照合した後。
import re
import urllib.request
response =
urllib.request.urlopen('http://example.webscraping.com/places/default/view/India-102')
html = response.read()
text = html.decode()
re.findall('<td class="w2p_fw">(.*?)</td>',text)
出力
対応する出力は次のようになります-
[
'<img src="/places/static/images/flags/in.png" />',
'3,287,590 square kilometres',
'1,173,108,018',
'IN',
'India',
'New Delhi',
'<a href="/places/default/continent/AS">AS</a>',
'.in',
'INR',
'Rupee',
'91',
'######',
'^(\\d{6})$',
'enIN,hi,bn,te,mr,ta,ur,gu,kn,ml,or,pa,as,bh,sat,ks,ne,sd,kok,doi,mni,sit,sa,fr,lus,inc',
'<div>
<a href="/places/default/iso/CN">CN </a>
<a href="/places/default/iso/NP">NP </a>
<a href="/places/default/iso/MM">MM </a>
<a href="/places/default/iso/BT">BT </a>
<a href="/places/default/iso/PK">PK </a>
<a href="/places/default/iso/BD">BD </a>
</div>'
]
上記の出力では、正規表現を使用してインドの国の詳細を確認できます。
美しいスープ
Webページからすべてのハイパーリンクを収集したい場合は、BeautifulSoupというパーサーを使用できます。これについては、次のURLで詳しく知ることができます。 https://www.crummy.com/software/BeautifulSoup/bs4/doc/.簡単に言うと、BeautifulSoupは、HTMLファイルとXMLファイルからデータを引き出すためのPythonライブラリです。スープオブジェクトを作成するには入力(ドキュメントまたはURL)が必要であり、それ自体ではWebページをフェッチできないため、リクエストで使用できます。次のPythonスクリプトを使用して、Webページのタイトルとハイパーリンクを収集できます。
美しいスープをインストールする
を使用して pip コマンド、インストールできます beautifulsoup 仮想環境またはグローバルインストールのいずれか。
(base) D:\ProgramData>pip install bs4
Collecting bs4
Downloading
https://files.pythonhosted.org/packages/10/ed/7e8b97591f6f456174139ec089c769f89
a94a1a4025fe967691de971f314/bs4-0.0.1.tar.gz
Requirement already satisfied: beautifulsoup4 in d:\programdata\lib\sitepackages
(from bs4) (4.6.0)
Building wheels for collected packages: bs4
Running setup.py bdist_wheel for bs4 ... done
Stored in directory:
C:\Users\gaurav\AppData\Local\pip\Cache\wheels\a0\b0\b2\4f80b9456b87abedbc0bf2d
52235414c3467d8889be38dd472
Successfully built bs4
Installing collected packages: bs4
Successfully installed bs4-0.0.1
例
この例では、requestspythonモジュールで実装された上記の例を拡張していることに注意してください。使用していますr.text Webページのタイトルなどの詳細を取得するためにさらに使用されるスープオブジェクトを作成するため。
まず、必要なPythonモジュールをインポートする必要があります-
import requests
from bs4 import BeautifulSoup
次のコード行では、リクエストを使用してURLのGETHTTPリクエストを作成します。 https://authoraditiagarwal.com/ GETリクエストを行うことによって。
r = requests.get('https://authoraditiagarwal.com/')
次に、次のようにSoupオブジェクトを作成する必要があります-
soup = BeautifulSoup(r.text, 'lxml')
print (soup.title)
print (soup.title.text)
出力
対応する出力は次のようになります-
<title>Learn and Grow with Aditi Agarwal</title>
Learn and Grow with Aditi Agarwal
Lxml
Webスクレイピングについて説明するもう1つのPythonライブラリはlxmlです。これは、高性能のHTMLおよびXML解析ライブラリです。比較的高速で簡単です。あなたはそれについてもっと読むことができますhttps://lxml.de/.
lxmlのインストール
pipコマンドを使用して、インストールできます lxml 仮想環境またはグローバルインストールのいずれか。
(base) D:\ProgramData>pip install lxml
Collecting lxml
Downloading
https://files.pythonhosted.org/packages/b9/55/bcc78c70e8ba30f51b5495eb0e
3e949aa06e4a2de55b3de53dc9fa9653fa/lxml-4.2.5-cp36-cp36m-win_amd64.whl
(3.
6MB)
100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 3.6MB 64kB/s
Installing collected packages: lxml
Successfully installed lxml-4.2.5
例:lxmlとリクエストを使用したデータ抽出
次の例では、Webページの特定の要素をからスクレイピングしています。 authoraditiagarwal.com lxmlとリクエストを使用して-
まず、次のようにlxmlライブラリからリクエストとhtmlをインポートする必要があります-
import requests
from lxml import html
次に、スクラップするWebページのURLを提供する必要があります
url = 'https://authoraditiagarwal.com/leadershipmanagement/'
次に、パスを提供する必要があります (Xpath) そのウェブページの特定の要素へ-
path = '//*[@id="panel-836-0-0-1"]/div/div/p[1]'
response = requests.get(url)
byte_string = response.content
source_code = html.fromstring(byte_string)
tree = source_code.xpath(path)
print(tree[0].text_content())
出力
対応する出力は次のようになります-
The Sprint Burndown or the Iteration Burndown chart is a powerful tool to communicate
daily progress to the stakeholders. It tracks the completion of work for a given sprint
or an iteration. The horizontal axis represents the days within a Sprint. The vertical
axis represents the hours remaining to complete the committed work.