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:

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

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

pip install boto3

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

Во-первых, нам нужно импортировать библиотеки Python для парсинга, здесь мы работаем с requests, и 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:

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

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

Step 2- Далее нам нужно разобраться с Unicode. Обратите внимание, что 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;

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

pip install PyMySQL

Step 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, а во-вторых, здесь мы будем использоватьpsycopg2 Библиотека Python для интеграции с Python.

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

pip install psycopg2