PythonWebスクレイピング-データ処理

前の章では、さまざまなPythonモジュールによるWebページからのデータの抽出またはWebスクレイピングについて学びました。この章では、スクレイピングされたデータを処理するためのさまざまな手法を見ていきましょう。

前書き

スクレイピングされたデータを処理するには、スプレッドシート(​​CSV)、JSONなどの特定の形式で、または場合によってはMySQLなどのデータベースにデータをローカルマシンに保存する必要があります。

CSVおよびJSONデータ処理

まず、Webページから取得した後、CSVファイルまたはスプレッドシートに情報を書き込みます。最初に、を使用して情報を取得する簡単な例を通して理解しましょう。BeautifulSoup 前と同じようにモジュールを作成し、Python CSVモジュールを使用して、そのテキスト情報をCSVファイルに書き込みます。

まず、必要なPythonライブラリを次のようにインポートする必要があります-

import requests
from bs4 import BeautifulSoup
import csv

次のコード行では、リクエストを使用してURLのGETHTTPリクエストを作成します。 https://authoraditiagarwal.com/ GETリクエストを行うことによって。

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

ここで、次のようにSoupオブジェクトを作成する必要があります-

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

次に、次のコード行を使用して、取得したデータをdataprocessing.csvという名前のCSVファイルに書き込みます。

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

このスクリプトを実行すると、テキスト情報またはWebページのタイトルが、ローカルマシン上の上記のCSVファイルに保存されます。

同様に、収集した情報をJSONファイルに保存できます。以下は、前回のPythonスクリプトで行ったのと同じ情報を取得するのと同じことを行うための、理解しやすいPythonスクリプトですが、今回は、取得した情報をJSONPythonモジュールを使用してJSONfile.txtに保存します。

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)

このスクリプトを実行した後、取得した情報、つまりWebページのタイトルは、ローカルマシンの上記のテキストファイルに保存されます。

AWSS3を使用したデータ処理

アーカイブの目的で、スクレイピングされたデータをローカルストレージに保存したい場合があります。しかし、このデータを大規模に保存して分析する必要がある場合はどうでしょうか。その答えは、AmazonS3またはAWSS3(Simple Storage Service)という名前のクラウドストレージサービスです。基本的に、AWS S3は、どこからでも任意の量のデータを保存および取得するように構築されたオブジェクトストレージです。

AWS S3にデータを保存するには、次の手順に従います。

Step 1−まず、データの保存中にPythonスクリプトで使用するための秘密鍵を提供するAWSアカウントが必要です。データを保存できるS3バケットが作成されます。

Step 2 −次に、インストールする必要があります boto3S3バケットにアクセスするためのPythonライブラリ。次のコマンドを使用してインストールできます-

pip install boto3

Step 3 −次に、次のPythonスクリプトを使用して、ウェブページからデータを取得し、AWSS3バケットに保存できます。

まず、スクレイピング用に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")

これで、AWSアカウントのour-contentという名前のバケットを確認できます。

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という名前のデータベースで、Webからスクレイピングした後、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とWebスクレイピングに精通している場合は、上記のコードを理解するのは難しいことではありません。

PostgreSQLを使用したデータ処理

世界的なボランティアチームによって開発されたPostgreSQLは、オープンソースのリレーショナルデータベース管理システム(RDMS)です。PostgreSQLを使用してスクレイピングされたデータを処理するプロセスは、MySQLのプロセスと似ています。2つの変更があります。1つはコマンドがMySQLとは異なり、2つ目はここで使用します。psycopg2 Pythonとの統合を実行するPythonライブラリ。

PostgreSQLに慣れていない場合は、次のURLで学ぶことができます。 https://www.tutorialspoint.com/postgresql/. そして、次のコマンドの助けを借りて、psycopg2Pythonライブラリをインストールできます-

pip install psycopg2