Python Web Scraping - Przetwarzanie danych

We wcześniejszych rozdziałach dowiedzieliśmy się o wyodrębnianiu danych ze stron internetowych lub skrobaniu sieci przez różne moduły Pythona. W tym rozdziale przyjrzyjmy się różnym technikom przetwarzania zeskrobanych danych.

Wprowadzenie

Aby przetworzyć zeskrobane dane, musimy przechowywać dane na naszej lokalnej maszynie w określonym formacie, takim jak arkusz kalkulacyjny (CSV), JSON lub czasami w bazach danych, takich jak MySQL.

Przetwarzanie danych CSV i JSON

Najpierw zapiszemy informacje, po pobraniu ich ze strony internetowej, do pliku CSV lub arkusza kalkulacyjnego. Najpierw zrozumiemy poprzez prosty przykład, w którym najpierw zdobędziemy informacje za pomocąBeautifulSoup moduł, tak jak wcześniej, a następnie za pomocą modułu Python CSV zapiszemy te informacje tekstowe do pliku CSV.

Najpierw musimy zaimportować niezbędne biblioteki Pythona w następujący sposób -

import requests
from bs4 import BeautifulSoup
import csv

W poniższym wierszu kodu używamy żądań do wykonania żądań HTTP GET dla adresu URL: https://authoraditiagarwal.com/ wykonując żądanie GET.

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

Teraz musimy utworzyć obiekt Soup w następujący sposób -

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

Teraz, z pomocą kolejnych linii kodu, zapiszemy pobrane dane do pliku CSV o nazwie dataprocessing.csv.

f = csv.writer(open(' dataprocessing.csv ','w'))
f.writerow(['Title'])
f.writerow([soup.title.text])

Po uruchomieniu tego skryptu informacje tekstowe lub tytuł strony internetowej zostaną zapisane w wyżej wymienionym pliku CSV na komputerze lokalnym.

Podobnie możemy zapisać zebrane informacje w pliku JSON. Poniżej znajduje się łatwy do zrozumienia skrypt w Pythonie, który robi to samo, w którym pobieramy te same informacje, co w poprzednim skrypcie Pythona, ale tym razem przechwycone informacje są zapisywane w JSONfile.txt przy użyciu modułu JSON Python.

import requests
from bs4 import BeautifulSoup
import csv
import json
r = requests.get('https://authoraditiagarwal.com/')
soup = BeautifulSoup(r.text, 'lxml')
y = json.dumps(soup.title.text)
with open('JSONFile.txt', 'wt') as outfile:
   json.dump(y, outfile)

Po uruchomieniu tego skryptu, pobrane informacje, tj. Tytuł strony, zostaną zapisane w wyżej wymienionym pliku tekstowym na Twoim komputerze.

Przetwarzanie danych za pomocą AWS S3

Czasami możemy chcieć zapisać zeskrobane dane w naszej lokalnej pamięci do celów archiwalnych. Ale co, jeśli musimy przechowywać i analizować te dane na masową skalę? Odpowiedzią jest usługa przechowywania w chmurze o nazwie Amazon S3 lub AWS S3 (Simple Storage Service). Zasadniczo AWS S3 to obiektowa pamięć masowa, która jest zbudowana do przechowywania i pobierania dowolnej ilości danych z dowolnego miejsca.

Możemy wykonać następujące kroki, aby przechowywać dane w AWS S3 -

Step 1- Najpierw potrzebujemy konta AWS, które zapewni nam tajne klucze do wykorzystania w naszym skrypcie Python podczas przechowywania danych. Stworzy wiadro S3, w którym będziemy mogli przechowywać nasze dane.

Step 2 - Następnie musimy zainstalować boto3Biblioteka Pythona do uzyskiwania dostępu do zasobnika S3. Można go zainstalować za pomocą następującego polecenia -

pip install boto3

Step 3 - Następnie możemy użyć następującego skryptu Python do pobierania danych ze strony internetowej i zapisywania ich w wiadrze AWS S3.

Najpierw musimy zaimportować biblioteki Pythona do skrobania, tutaj pracujemy requests, i boto3 zapisywanie danych do wiadra S3.

import requests
import boto3

Teraz możemy zeskrobać dane z naszego adresu URL.

data = requests.get("Enter the URL").text

Teraz, aby zapisać dane w zasobniku S3, musimy utworzyć klienta S3 w następujący sposób -

s3 = boto3.client('s3')
bucket_name = "our-content"

Następny wiersz kodu utworzy zasobnik S3 w następujący sposób -

s3.create_bucket(Bucket = bucket_name, ACL = 'public-read')
s3.put_object(Bucket = bucket_name, Key = '', Body = data, ACL = "public-read")

Teraz możesz sprawdzić wiadro z nazwą our-content na swoim koncie AWS.

Przetwarzanie danych za pomocą MySQL

Nauczmy się przetwarzać dane za pomocą MySQL. Jeśli chcesz dowiedzieć się więcej o MySQL, możesz kliknąć łączehttps://www.tutorialspoint.com/mysql/.

Za pomocą poniższych kroków możemy zeskrobać i przetworzyć dane do tabeli MySQL -

Step 1- Najpierw za pomocą MySQL musimy stworzyć bazę danych i tabelę, w której chcemy zapisywać nasze zeskrobane dane. Na przykład tworzymy tabelę z następującym zapytaniem -

CREATE TABLE Scrap_pages (id BIGINT(7) NOT NULL AUTO_INCREMENT,
title VARCHAR(200), content VARCHAR(10000),PRIMARY KEY(id));

Step 2- Następnie musimy zająć się Unicode. Zauważ, że MySQL domyślnie nie obsługuje Unicode. Musimy włączyć tę funkcję za pomocą następujących poleceń, które zmienią domyślny zestaw znaków dla bazy danych, dla tabeli i dla obu kolumn -

ALTER DATABASE scrap CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE Scrap_pages CONVERT TO CHARACTER SET utf8mb4 COLLATE
utf8mb4_unicode_ci;
ALTER TABLE Scrap_pages CHANGE title title VARCHAR(200) CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
ALTER TABLE pages CHANGE content content VARCHAR(10000) CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

Step 3- Teraz zintegruj MySQL z Pythonem. W tym celu będziemy potrzebować PyMySQL, który można zainstalować za pomocą następującego polecenia

pip install PyMySQL

Step 4- Teraz nasza baza danych o nazwie Scrap, utworzona wcześniej, jest gotowa do zapisania danych po zeskrobaniu z sieci w tabeli o nazwie Scrap_pages. W naszym przykładzie pobieramy dane z Wikipedii i zostaną one zapisane w naszej bazie danych.

Najpierw musimy zaimportować wymagane moduły Pythona.

from urllib.request import urlopen
from bs4 import BeautifulSoup
import datetime
import random
import pymysql
import re

Teraz zrób połączenie, czyli zintegruj to z Pythonem.

conn = pymysql.connect(host='127.0.0.1',user='root', passwd = None, db = 'mysql',
charset = 'utf8')
cur = conn.cursor()
cur.execute("USE scrap")
random.seed(datetime.datetime.now())
def store(title, content):
   cur.execute('INSERT INTO scrap_pages (title, content) VALUES ''("%s","%s")', (title, content))
   cur.connection.commit()

Teraz połącz się z Wikipedią i pobierz z niej dane.

def getLinks(articleUrl):
   html = urlopen('http://en.wikipedia.org'+articleUrl)
   bs = BeautifulSoup(html, 'html.parser')
   title = bs.find('h1').get_text()
   content = bs.find('div', {'id':'mw-content-text'}).find('p').get_text()
   store(title, content)
   return bs.find('div', {'id':'bodyContent'}).findAll('a',href=re.compile('^(/wiki/)((?!:).)*$'))
links = getLinks('/wiki/Kevin_Bacon')
try:
   while len(links) > 0:
      newArticle = links[random.randint(0, len(links)-1)].attrs['href']
      print(newArticle)
      links = getLinks(newArticle)

Na koniec musimy zamknąć zarówno kursor, jak i połączenie.

finally:
   cur.close()
   conn.close()

Spowoduje to zapisanie danych zebranych z Wikipedii w tabeli o nazwie scrap_pages. Jeśli znasz MySQL i skrobanie stron internetowych, powyższy kod nie byłby trudny do zrozumienia.

Przetwarzanie danych za pomocą PostgreSQL

PostgreSQL, opracowany przez zespół wolontariuszy z całego świata, to system zarządzania relacyjnymi bazami danych typu open source (RDMS). Proces przetwarzania zeskrobanych danych przy użyciu PostgreSQL jest podobny do procesu MySQL. Byłyby dwie zmiany: po pierwsze, polecenia byłyby inne niż MySQL, a po drugie, tutaj będziemy używaćpsycopg2 Biblioteka Pythona do integracji z Pythonem.

Jeśli nie znasz PostgreSQL, możesz się tego nauczyć pod adresem https://www.tutorialspoint.com/postgresql/. Za pomocą następującego polecenia możemy zainstalować bibliotekę psycopg2 Python -

pip install psycopg2