Python Web Scraping - Xử lý dữ liệu

Trong các chương trước, chúng ta đã tìm hiểu về cách trích xuất dữ liệu từ các trang web hoặc quét web bằng các mô-đun Python khác nhau. Trong chương này, chúng ta hãy xem xét các kỹ thuật khác nhau để xử lý dữ liệu đã được loại bỏ.

Giới thiệu

Để xử lý dữ liệu đã được cạo, chúng ta phải lưu trữ dữ liệu trên máy cục bộ của mình ở một định dạng cụ thể như bảng tính (CSV), JSON hoặc đôi khi trong cơ sở dữ liệu như MySQL.

Xử lý dữ liệu CSV và JSON

Đầu tiên, chúng tôi sẽ viết thông tin, sau khi lấy từ trang web, vào tệp CSV hoặc bảng tính. Trước tiên, hãy để chúng tôi hiểu qua một ví dụ đơn giản mà trước tiên chúng tôi sẽ lấy thông tin bằng cách sử dụngBeautifulSoup mô-đun, như đã làm trước đó, và sau đó bằng cách sử dụng mô-đun CSV của Python, chúng tôi sẽ ghi thông tin dạng văn bản đó vào tệp CSV.

Đầu tiên, chúng ta cần nhập các thư viện Python cần thiết như sau:

import requests
from bs4 import BeautifulSoup
import csv

Trong dòng mã sau đây, chúng tôi sử dụng các yêu cầu để thực hiện yêu cầu GET HTTP cho url: https://authoraditiagarwal.com/ bằng cách đưa ra yêu cầu GET.

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

Bây giờ, chúng ta cần tạo một đối tượng Soup như sau:

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

Bây giờ, với sự trợ giúp của các dòng mã tiếp theo, chúng ta sẽ ghi dữ liệu đã lấy vào một tệp CSV có tên dataprocessing.csv.

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

Sau khi chạy tập lệnh này, thông tin văn bản hoặc tiêu đề của trang web sẽ được lưu trong tệp CSV được đề cập ở trên trên máy cục bộ của bạn.

Tương tự, chúng ta có thể lưu thông tin thu thập được trong tệp JSON. Sau đây là một tập lệnh Python dễ hiểu để thực hiện tương tự trong đó chúng ta đang lấy thông tin giống như chúng ta đã làm trong tập lệnh Python trước, nhưng lần này thông tin lấy được được lưu trong JSONfile.txt bằng cách sử dụng mô-đun 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)

Sau khi chạy tập lệnh này, thông tin nắm được tức là tiêu đề của trang web sẽ được lưu trong tệp văn bản được đề cập ở trên trên máy cục bộ của bạn.

Xử lý dữ liệu bằng AWS S3

Đôi khi, chúng tôi có thể muốn lưu dữ liệu cóp nhặt trong bộ nhớ cục bộ của mình cho mục đích lưu trữ. Nhưng nếu chúng ta cần lưu trữ và phân tích dữ liệu này ở quy mô lớn thì sao? Câu trả lời là dịch vụ lưu trữ đám mây có tên Amazon S3 hoặc AWS S3 (Simple Storage Service). Về cơ bản AWS S3 là một bộ lưu trữ đối tượng được xây dựng để lưu trữ và truy xuất bất kỳ lượng dữ liệu nào từ bất kỳ đâu.

Chúng ta có thể làm theo các bước sau để lưu trữ dữ liệu trong AWS S3 -

Step 1- Trước tiên, chúng tôi cần một tài khoản AWS sẽ cung cấp cho chúng tôi các khóa bí mật để sử dụng trong tập lệnh Python của chúng tôi trong khi lưu trữ dữ liệu. Nó sẽ tạo một thùng S3 để chúng ta có thể lưu trữ dữ liệu của mình.

Step 2 - Tiếp theo, chúng ta cần cài đặt boto3Thư viện Python để truy cập thùng S3. Nó có thể được cài đặt với sự trợ giúp của lệnh sau:

pip install boto3

Step 3 - Tiếp theo, chúng ta có thể sử dụng tập lệnh Python sau để thu thập dữ liệu từ trang web và lưu nó vào nhóm AWS S3.

Đầu tiên, chúng tôi cần nhập các thư viện Python để cạo, ở đây chúng tôi đang làm việc với requestsboto3 lưu dữ liệu vào nhóm S3.

import requests
import boto3

Bây giờ chúng ta có thể lấy dữ liệu từ URL của mình.

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

Bây giờ để lưu trữ dữ liệu vào thùng S3, chúng ta cần tạo ứng dụng khách S3 như sau:

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

Dòng mã tiếp theo sẽ tạo nhóm S3 như sau:

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

Bây giờ bạn có thể kiểm tra nhóm với tên nội dung của chúng tôi từ tài khoản AWS của bạn.

Xử lý dữ liệu bằng MySQL

Hãy để chúng tôi tìm hiểu cách xử lý dữ liệu bằng MySQL. Nếu bạn muốn tìm hiểu về MySQL, thì bạn có thể theo liên kếthttps://www.tutorialspoint.com/mysql/.

Với sự trợ giúp của các bước sau, chúng tôi có thể thu thập và xử lý dữ liệu vào bảng MySQL -

Step 1- Đầu tiên, bằng cách sử dụng MySQL, chúng ta cần tạo một cơ sở dữ liệu và bảng mà chúng ta muốn lưu dữ liệu đã cạo của mình. Ví dụ: chúng tôi đang tạo bảng với truy vấn sau:

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

Step 2- Tiếp theo, chúng ta cần xử lý Unicode. Lưu ý rằng MySQL không xử lý Unicode theo mặc định. Chúng ta cần bật tính năng này với sự trợ giúp của các lệnh sau sẽ thay đổi bộ ký tự mặc định cho cơ sở dữ liệu, cho bảng và cho cả hai cột -

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- Bây giờ, tích hợp MySQL với Python. Đối với điều này, chúng tôi sẽ cần PyMySQL có thể được cài đặt với sự trợ giúp của lệnh sau

pip install PyMySQL

Step 4- Bây giờ, cơ sở dữ liệu của chúng tôi có tên là Scrap, được tạo trước đó, đã sẵn sàng để lưu dữ liệu, sau khi được quét từ web, vào bảng có tên Scrap_pages. Ở đây trong ví dụ của chúng tôi, chúng tôi sẽ thu thập dữ liệu từ Wikipedia và nó sẽ được lưu vào cơ sở dữ liệu của chúng tôi.

Đầu tiên, chúng ta cần nhập các mô-đun Python được yêu cầu.

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

Bây giờ, hãy tạo một kết nối, đó là tích hợp điều này với 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()

Bây giờ, hãy kết nối với Wikipedia và lấy dữ liệu từ nó.

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)

Cuối cùng, chúng ta cần đóng cả con trỏ và kết nối.

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

Thao tác này sẽ lưu dữ liệu thu thập từ Wikipedia vào bảng có tên là scrap_pages. Nếu bạn đã quen với MySQL và tìm kiếm web, thì đoạn mã trên sẽ không khó hiểu.

Xử lý dữ liệu bằng PostgreSQL

PostgreSQL, được phát triển bởi một nhóm tình nguyện viên trên toàn thế giới, là một hệ thống quản lý cơ sở dữ liệu quan hệ mã nguồn mở (RDMS). Quá trình xử lý dữ liệu được cạo bằng PostgreSQL tương tự như của MySQL. Sẽ có hai thay đổi: Thứ nhất, các lệnh sẽ khác với MySQL và thứ hai, ở đây chúng ta sẽ sử dụngpsycopg2 Thư viện Python để thực hiện tích hợp với Python.

Nếu bạn chưa quen với PostgreSQL thì bạn có thể tìm hiểu nó tại https://www.tutorialspoint.com/postgresql/. Và với sự trợ giúp của lệnh sau, chúng ta có thể cài đặt thư viện Python psycopg2 -

pip install psycopg2