Учебники

Python Web Scraping — Обработка данных

В предыдущих главах мы узнали о том, как извлекать данные из веб-страниц или просматривать веб-страницы различными модулями Python. В этой главе давайте рассмотрим различные методы обработки данных, которые были очищены.

Вступление

Для обработки данных, которые были очищены, мы должны хранить данные на нашем локальном компьютере в определенном формате, таком как электронная таблица (CSV), JSON или иногда в базах данных, таких как MySQL.

CSV и JSON Обработка данных

Во-первых, мы собираемся записать информацию после захвата с веб-страницы в файл CSV или электронную таблицу. Давайте сначала разберемся на простом примере, в котором мы сначала получим информацию с помощью модуля BeautifulSoup , как это делалось ранее, а затем с помощью модуля Python CSV мы запишем эту текстовую информацию в файл CSV.

Во-первых, нам нужно импортировать необходимые библиотеки Python следующим образом:

import requests
from bs4 import BeautifulSoup
import csv

В этой следующей строке кода мы используем запросы для выполнения HTTP-запросов GET для URL: https://authoraditiagarwal.com/ , отправляя запрос GET.

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

Теперь нам нужно создать объект Soup следующим образом:

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

Теперь с помощью следующих строк кода мы запишем захваченные данные в файл CSV с именем dataprocessing.csv.

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

После запуска этого сценария текстовая информация или заголовок веб-страницы будут сохранены в вышеуказанном CSV-файле на вашем локальном компьютере.

Точно так же мы можем сохранить собранную информацию в файл JSON. Ниже приведен простой для понимания сценарий Python для выполнения того же, в котором мы собираем ту же информацию, что и в предыдущем сценарии Python, но на этот раз полученная информация сохраняется в JSONfile.txt с помощью модуля 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)

После запуска этого скрипта информация о захвате, т.е. название веб-страницы, будет сохранена в вышеупомянутом текстовом файле на вашем локальном компьютере.

Обработка данных с использованием AWS S3

Иногда мы можем захотеть сохранить очищенные данные в нашем локальном хранилище для архивирования. Но что, если нам нужно хранить и анализировать эти данные в большом масштабе? Ответ — сервис облачного хранения с именем Amazon S3 или AWS S3 (Simple Storage Service). По сути, AWS S3 — это хранилище объектов, созданное для хранения и извлечения любого количества данных из любого места.

Для хранения данных в AWS S3 мы можем выполнить следующие шаги:

Шаг 1. Сначала нам нужна учетная запись AWS, которая предоставит нам секретные ключи для использования в нашем скрипте Python при хранении данных. Это создаст корзину S3, в которой мы можем хранить наши данные.

Шаг 2 — Далее нам нужно установить библиотеку boto3 Python для доступа к корзине S3. Его можно установить с помощью следующей команды —

pip install boto3

Шаг 3. Далее мы можем использовать следующий скрипт Python для удаления данных с веб-страницы и сохранения их в корзину AWS S3.

Во-первых, нам нужно импортировать библиотеки Python для очистки, здесь мы работаем с запросами и boto3 сохраняем данные в корзину S3.

import requests
import boto3

Теперь мы можем соскрести данные с нашего URL.

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

Теперь для хранения данных в корзину S3 нам нужно создать клиент S3 следующим образом:

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

Следующая строка кода создаст сегмент S3 следующим образом:

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

Теперь вы можете проверить список с названием our-content в вашей учетной записи AWS.

Обработка данных с использованием MySQL

Давайте узнаем, как обрабатывать данные с использованием MySQL. Если вы хотите узнать о MySQL, вы можете перейти по ссылке https://www.tutorialspoint.com/mysql/.

С помощью следующих шагов мы можем очистить и обработать данные в таблицу MySQL:

Шаг 1 — Во-первых, используя MySQL, нам нужно создать базу данных и таблицу, в которой мы хотим сохранить очищенные данные. Например, мы создаем таблицу со следующим запросом —

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

Шаг 2 — Далее нам нужно разобраться с Юникодом. Обратите внимание, что MySQL не обрабатывает Unicode по умолчанию. Нам нужно включить эту функцию с помощью следующих команд, которые изменят набор символов по умолчанию для базы данных, для таблицы и для обоих столбцов —

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;

Шаг 3 — Теперь интегрируйте MySQL с Python. Для этого нам понадобится PyMySQL, который можно установить с помощью следующей команды

pip install PyMySQL 

Шаг 4 — Теперь наша база данных с именем Scrap, созданная ранее, готова сохранить данные после извлечения из сети в таблицу с именем Scrap_pages. Здесь, в нашем примере, мы собираемся очистить данные из Википедии, и они будут сохранены в нашей базе данных.

Во-первых, нам нужно импортировать необходимые модули Python.

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

Теперь создайте соединение, то есть интегрируйте его с Python.

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

Теперь соединитесь с Википедией и получите данные из нее.

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)

Наконец, нам нужно закрыть как курсор, так и соединение.

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

Это сохранит собранные данные из Википедии в таблицу с именем scrap_pages. Если вы знакомы с MySQL и веб-очисткой, то приведенный выше код не будет сложным для понимания.

Обработка данных с использованием PostgreSQL

PostgreSQL, разработанный всемирной командой добровольцев, представляет собой систему управления реляционными базами данных с открытым исходным кодом (RDMS). Процесс обработки очищенных данных с использованием PostgreSQL аналогичен процессу MySQL. Будет два изменения: во-первых, команды будут отличаться от MySQL, а во-вторых, здесь мы будем использовать библиотеку Python psycopg2 для ее интеграции с Python.

Если вы не знакомы с PostgreSQL, вы можете узнать его по адресу https://www.tutorialspoint.com/postgresql/. И с помощью следующей команды мы можем установить библиотеку Python psycopg2 —