Python-web-scraping-data-extraction

提供:Dev Guides
移動先:案内検索

Python Webスクレイピング-データ抽出

Webページを分析するということは、その構造を理解することを意味します。 さて、なぜWebスクレイピングにとって重要なのかという疑問が生じます。 この章では、これを詳細に理解してみましょう。

Webページ分析

Webページの分析は重要です。分析なしでは、抽出後にそのWebページ(構造化または非構造化)からデータを受信する形式を知ることができないためです。 私たちは次の方法でウェブページの分析を行うことができます-

ページソースの表示

これは、ソースコードを調べることでWebページがどのように構成されているかを理解する方法です。 これを実装するには、ページを右クリックし、[ページのソースを表示]オプションを選択する必要があります。 次に、そのWebページから関心のあるデータをHTMLの形式で取得します。 しかし、主な関心事は、書式設定が困難な空白と書式設定です。

[要素の検査]オプションをクリックしてページソースを検査する

これは、Webページを分析する別の方法です。 ただし、違いは、Webページのソースコードの書式設定と空白の問題を解決することです。 これを実装するには、右クリックして、メニューから Inspect または Inspect element オプションを選択します。 そのWebページの特定の領域または要素に関する情報を提供します。

Webページからデータを抽出するさまざまな方法

以下の方法は、主にWebページからデータを抽出するために使用されます-

正規表現

Pythonに埋め込まれた高度に専門化されたプログラミング言語です。 Pythonの re モジュールで使用できます。 REまたは正規表現または正規表現パターンとも呼ばれます。 正規表現の助けを借りて、データから照合する文字列の可能なセットに対していくつかのルールを指定できます。

正規表現全般について詳しく知りたい場合は、リンクlink//automata_theory/regular_expressions [https://www.finddevguides.com/automata_theory/regular_expressions]にアクセスし、reモジュールまたは正規表現について詳しく知りたい場合Pythonでは、リンク:/python/python_reg_expressions [link https://www.finddevguides.com/python/python_reg_expressions]をたどることができます。

次の例では、正規表現を使用して<td>の内容を照合した後、http://example.webscraping.comからインドに関するデータをスクレイピングします。

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という名前のパーサーを使用できます。これは、https://www.crummy.com/software/BeautifulSoup/bs4/doc/[[[1]]]簡単に言えば、BeautifulSoupはHTMLおよびXMLファイルからデータを引き出すためのPythonライブラリです。 スープオブジェクトを作成するために入力(ドキュメントまたはURL)が必要なため、それ自体ではWebページを取得できないため、リクエストで使用できます。 次のPythonスクリプトを使用して、Webページとハイパーリンクのタイトルを収集できます。

Beautiful Soupのインストール

*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

この例では、Pythonモジュールのリクエストで実装された上記の例を拡張していることに注意してください。 Webページのタイトルなどの詳細を取得するためにさらに使用されるスープオブジェクトの作成に r.text を使用しています。

まず、必要なPythonモジュールをインポートする必要があります-

import requests
from bs4 import BeautifulSoup

この次のコード行では、リクエストを使用して、GETリクエストを作成することにより、URL [[2]] HTTPリクエストを作成します。

r = requests.get('https://authoraditiagarwal.com/')

今、私たちは次のようにスープオブジェクトを作成する必要があります-

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/[[[3]]]をご覧ください。

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とリクエストを使用したデータ抽出

次の例では、lxmlとリクエストを使用して、 authoraditiagarwal.com からWebページの特定の要素をスクレイピングしています-

まず、次のように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.