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