Python Web Scraping - Datenextraktion

Das Analysieren einer Webseite bedeutet, ihre Struktur zu verstehen. Nun stellt sich die Frage, warum es für das Web-Scraping wichtig ist. Lassen Sie uns dies in diesem Kapitel im Detail verstehen.

Webseitenanalyse

Die Analyse von Webseiten ist wichtig, da wir ohne Analyse nicht wissen können, in welcher Form wir die Daten von dieser Webseite (strukturiert oder unstrukturiert) nach der Extraktion erhalten werden. Wir können Webseitenanalysen auf folgende Arten durchführen:

Anzeigen der Seitenquelle

Auf diese Weise können Sie verstehen, wie eine Webseite strukturiert ist, indem Sie den Quellcode untersuchen. Um dies zu implementieren, müssen wir mit der rechten Maustaste auf die Seite klicken und dann die auswählenView page sourceMöglichkeit. Dann erhalten wir die Daten unseres Interesses von dieser Webseite in Form von HTML. Das Hauptanliegen sind jedoch Leerzeichen und Formatierungen, die für uns schwer zu formatieren sind.

Überprüfen der Seitenquelle durch Klicken auf Option Element überprüfen

Dies ist eine weitere Möglichkeit, Webseiten zu analysieren. Der Unterschied besteht jedoch darin, dass das Problem der Formatierung und Leerzeichen im Quellcode der Webseite behoben wird. Sie können dies implementieren, indem Sie mit der rechten Maustaste klicken und dann die auswählenInspect oder Inspect elementOption aus dem Menü. Es enthält Informationen zu bestimmten Bereichen oder Elementen dieser Webseite.

Verschiedene Möglichkeiten zum Extrahieren von Daten von Webseiten

Die folgenden Methoden werden hauptsächlich zum Extrahieren von Daten von einer Webseite verwendet:

Regulären Ausdruck

Sie sind eine hochspezialisierte Programmiersprache, die in Python eingebettet ist. Wir können es durch nutzenreModul von Python. Es wird auch als RE oder Regexes oder Regex-Muster bezeichnet. Mithilfe regulärer Ausdrücke können wir einige Regeln für den möglichen Satz von Zeichenfolgen angeben, die aus den Daten übereinstimmen sollen.

Wenn Sie mehr über reguläre Ausdrücke im Allgemeinen erfahren möchten, gehen Sie zum Link https://www.tutorialspoint.com/automata_theory/regular_expressions.htmWenn Sie mehr über das Modul oder den regulären Ausdruck in Python erfahren möchten, folgen Sie dem Link https://www.tutorialspoint.com/python/python_reg_expressions.htm .

Beispiel

Im folgenden Beispiel werden wir Daten über Indien aus kratzen http://example.webscraping.com nach dem Abgleichen des Inhalts von <td> mit Hilfe des regulären Ausdrucks.

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)

Ausgabe

Die entsprechende Ausgabe wird wie hier gezeigt sein -

[
   '<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>'
]

Beachten Sie, dass Sie in der obigen Ausgabe die Details zum Land Indien mit regulären Ausdrücken sehen können.

Schöne Suppe

Angenommen, wir möchten alle Hyperlinks von einer Webseite sammeln, dann können wir einen Parser namens BeautifulSoup verwenden, der unter näher bekannt ist https://www.crummy.com/software/BeautifulSoup/bs4/doc/.Mit einfachen Worten, BeautifulSoup ist eine Python-Bibliothek zum Abrufen von Daten aus HTML- und XML-Dateien. Es kann mit Anforderungen verwendet werden, da es eine Eingabe (Dokument oder URL) benötigt, um ein Suppenobjekt zu erstellen, da es keine Webseite selbst abrufen kann. Sie können das folgende Python-Skript verwenden, um den Titel der Webseite und der Hyperlinks zu erfassen.

Schöne Suppe installieren

Verwendung der pip Befehl können wir installieren beautifulsoup entweder in unserer virtuellen Umgebung oder in der globalen Installation.

(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

Beispiel

Beachten Sie, dass wir in diesem Beispiel das obige Beispiel erweitern, das mit dem Anforderungs-Python-Modul implementiert wurde. wir benutzenr.text zum Erstellen eines Suppenobjekts, das weiterhin zum Abrufen von Details wie dem Titel der Webseite verwendet wird.

Zuerst müssen wir die notwendigen Python-Module importieren -

import requests
from bs4 import BeautifulSoup

In dieser folgenden Codezeile verwenden wir Anforderungen, um GET-HTTP-Anforderungen für die URL zu erstellen: https://authoraditiagarwal.com/ durch eine GET-Anfrage.

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

Jetzt müssen wir ein Soup-Objekt wie folgt erstellen:

soup = BeautifulSoup(r.text, 'lxml')
print (soup.title)
print (soup.title.text)

Ausgabe

Die entsprechende Ausgabe wird wie hier gezeigt sein -

<title>Learn and Grow with Aditi Agarwal</title>
Learn and Grow with Aditi Agarwal

Lxml

Eine weitere Python-Bibliothek, die wir für das Web-Scraping diskutieren werden, ist lxml. Es ist eine leistungsstarke HTML- und XML-Parsing-Bibliothek. Es ist vergleichsweise schnell und unkompliziert. Sie können mehr darüber lesenhttps://lxml.de/.

Lxml installieren

Mit dem Befehl pip können wir installieren lxml entweder in unserer virtuellen Umgebung oder in der globalen Installation.

(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

Beispiel: Datenextraktion mit lxml und Anfragen

Im folgenden Beispiel wird ein bestimmtes Element der Webseite entfernt authoraditiagarwal.com mit lxml und Anfragen -

Zuerst müssen wir die Anforderungen und HTML aus der lxml-Bibliothek wie folgt importieren:

import requests
from lxml import html

Jetzt müssen wir die URL der Webseite angeben, die verschrottet werden soll

url = 'https://authoraditiagarwal.com/leadershipmanagement/'

Jetzt müssen wir den Weg bereitstellen (Xpath) zu einem bestimmten Element dieser Webseite -

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())

Ausgabe

Die entsprechende Ausgabe wird wie hier gezeigt sein -

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.