Python-web-scraping-data-processing

提供:Dev Guides
移動先:案内検索

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

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

前書き

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

CSVおよびJSONデータ処理

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

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

import requests
from bs4 import BeautifulSoup
import csv

次のコード行では、リクエストを使用して、GETリクエストを作成することにより、URL [[1]] HTTPリクエストを作成します。

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

今、私たちは次のようにスープオブジェクトを作成する必要があります-

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スクリプトを理解するのは簡単ですが、今回は取得した情報はJSON Pythonモジュールを使用して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ページのタイトルは、ローカルマシンの上記のテキストファイルに保存されます。

AWS S3を使用したデータ処理

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

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

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

ステップ2 *-次に、S3バケットにアクセスするために *boto3 Pythonライブラリをインストールする必要があります。 それは、次のコマンドの助けを借りてインストールすることができます-

pip install boto3
  • ステップ3 *-次に、次のPythonスクリプトを使用して、Webページからデータを取得し、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")

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

MySQLを使用したデータ処理

MySQLを使用してデータを処理する方法を学びましょう。 MySQLについて学びたい場合は、リンクlink//mysql/index [[[2]]]をたどることができます。

次の手順の助けを借りて、データをスクレイプしてMySQLテーブルに処理できます-

  • ステップ1 *-まず、MySQLを使用して、スクレイピングされたデータを保存するデータベースとテーブルを作成する必要があります。 たとえば、次のクエリでテーブルを作成しています-
CREATE TABLE Scrap_pages (id BIGINT(7) NOT NULL AUTO_INCREMENT,
title VARCHAR(200), content VARCHAR(10000),PRIMARY KEY(id));
  • ステップ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;
  • ステップ3 *-次に、MySQLとPythonを統合します。 これには、次のコマンドを使用してインストールできるPyMySQLが必要です。
pip install PyMySQL
  • ステップ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()

これにより、Wikipediaから収集したデータがscrap_pagesという名前のテーブルに保存されます。 MySQLとWebスクレイピングに精通している場合、上記のコードを理解するのは難しくありません。

PostgreSQLを使用したデータ処理

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

PostgreSQLに慣れていない場合は、リンク:/postgresql/index [[[3]]]で学習できます。次のコマンドを使用すると、psycopg2 Pythonライブラリをインストールできます-

pip install psycopg2