Pythonクローラーのデータストレージ

Pythonクローラーのデータストレージ

クロール後にデータを保存する方法?この記事では、データをexcel、txt、およびデータベースに保存する一般的な操作について説明します。

1.結果出力

ここでの結果は直接印刷されますが、ストレージを永続化する方法は?

for title,actor,time,score,count,comment in zip(titles,actors,times,scores,counts,comments):
    actor = actor.strip()
    time = time.strip().split()[0]
    print(title,actor,time,score,count,comment)

2.データストレージ

モード 説明
w 書き込み専用のファイルを開きます。ファイルが既に存在する場合は、ファイルを開いて最初から編集を開始します。つまり、元のコンテンツが削除されます。ファイルが存在しない場合は、新しいファイルを作成します。
wb 書き込み専用のバイナリ形式でファイルを開きます。ファイルが既に存在する場合は、ファイルを開いて最初から編集を開始します。つまり、元のコンテンツが削除されます。ファイルが存在しない場合は、新しいファイルを作成します。
w + 読み取りと書き込み用にファイルを開きます。ファイルが既に存在する場合は、ファイルを開いて最初から編集を開始します。つまり、元のコンテンツが削除されます。ファイルが存在しない場合は、新しいファイルを作成します。
wb + 読み取りと書き込み用にバイナリ形式でファイルを開きます。ファイルが既に存在する場合は、ファイルを開いて最初から編集を開始します。つまり、元のコンテンツが削除されます。ファイルが存在しない場合は、新しいファイルを作成します。
A 追加するファイルを開きます。ファイルがすでに存在する場合、ファイルポインタはファイルの最後に配置されます。つまり、新しいコンテンツは既存のコンテンツの後に書き込まれます。ファイルが存在しない場合は、書き込み用に新しいファイルを作成します。
から 追加するためにバイナリ形式でファイルを開きます。ファイルがすでに存在する場合、ファイルポインタはファイルの最後に配置されます。つまり、新しいコンテンツは既存のコンテンツの後に書き込まれます。ファイルが存在しない場合は、書き込み用に新しいファイルを作成します。
a + 読み取りと書き込み用にファイルを開きます。ファイルがすでに存在する場合、ファイルポインタはファイルの最後に配置されます。ファイルを開くと、追加モードになります。ファイルが存在しない場合は、読み取りと書き込み用に新しいファイルを作成します。
+から 追加するためにバイナリ形式でファイルを開きます。ファイルがすでに存在する場合、ファイルポインタはファイルの最後に配置されます。ファイルが存在しない場合は、読み取りと書き込み用に新しいファイルを作成します。

2.1データをtxtに保存する

with open('text.txt','w') as f:
    # 写入单行
    f.write()
    # 写入多行
    f.writelines([])

2.2データをcsvに保存

import csv
with open('bilibili.csv','w',encoding='utf-8',newline='') as f:
    # 创建一个写的对象
	writer = csv.writer(f)
    # 写入单行
 	writer.writerow([])
	# 写入多行
    writer.writerows([(),(),()])

2.3データベースへのデータストレージ

より複雑なデータの場合は、データベースに保存できます。例としてmysqlを取り上げます。

pip install pymysql

2.3.1データベース接続

import pymysql
db = pymysql.connect('IP','username','passwd','DATABASE')

# 连接到Mysql
db = pymysql.connect('localhost','root','123456')

# 连接到Mysql指定数据库
db= pymysql.connect('localhost','root','123456','database')

2.3.2データベースを作成し、データテーブルを作成します

# 首先连接到数据库
db = pymysql.connect('localhost','root','123456')

# 建立游标
cursor = db.cursor()

# 创建数据库
cursor.execute("CREATE DATABASE doubanTop250")

# 创建数据表(在已有的数据库的前提下)
cursor.execute('''CREATE TABLE movie 
               (`id` INT AUTO_INCREMENT PRIMARY KEY,
                `title` VARCHAR(100) NOT NULL,
                `actor`VARCHAR(100) NOT NULL,
                `release_time` VARCHAR(100) NOT NULL,
                `score` VARCHAR(100) NOT NULL,
                `count` VARCHAR(100) NOT NULL,
                `comment` VARCHAR(100) NOT NULL)
               	 DEFAULT CHARSET=utf8;''')

2.3.3データの挿入

import pymysql
db = pymysql.connect('localhost','root','123456','database', charset='utf8')
cursor = db.cursor()
sql = '''insert into douban_movie4(title,actor,release_time,score,count,comment) values (%s,%s,%s,%s,%s,%s)'''
cursor.execute(sql,data)
    
# 提交
db.commit()

例としてTop250Douban映画を取り上げます

import csv
import time
import pymysql
import requests
from lxml import etree

class MovieSpider(object):
    def __init__(self):
        self.headers = {
    
    
            'user-agent': 'Mozilla/5.0'
        }
        self.url = 'https://movie.douban.com/top250?start={}&filter='
        self.db = pymysql.connect('localhost','root','123456','doubanTop250')
        self.cursor = self.db.cursor()
        
        
    def get_html(self,url):
        resp = requests.get(url, headers=self.headers)
        html = resp.text
        self.parse_html(html)

    def parse_html(self,html):
        xp_html = etree.HTML(html)
        titles = xp_html.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[1]/a/span[1]/text()')
        scores = xp_html.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/div/span[2]/text()')
        counts = xp_html.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/div/span[4]/text()')
        comments = xp_html.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/p[2]/span/text()')

        for title, score, count, comment, in zip(titles, scores, counts, comments):
            data = [title, score, count, comment]
            sql = '''insert into movie(title,score,count,comment) values (%s,%s,%s,%s)'''
            self.cursor.execute(sql,data)

                        
    def main(self):
        start_time = time.time()
        
        for i in range(0,250,25):
            url = self.url.format(i)
            self.get_html(url)
        
        self.db.commit()
        end_time = time.time()
        print('总耗时:',end_time-start_time)



if __name__ == '__main__':
    spider = MovieSpider()
    spider.main()

推奨読書:

  1. xpathを使用してデータをクロールします
  2. ジュピターノートブックの使用
  3. BeautifulSoupはトップ250のDouban映画をクロールします
  4. 記事では、リクエストモジュールをマスターすることができます
  5. PythonWebクローラーの基本-BeautifulSoup

これで終わりです。それがあなたを助け、好きでフォローすることを歓迎します、あなたの好きは私にとって非常に重要です

おすすめ

転載: blog.csdn.net/qq_45176548/article/details/112222080
おすすめ