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()
推奨読書:
- xpathを使用してデータをクロールします
- ジュピターノートブックの使用
- BeautifulSoupはトップ250のDouban映画をクロールします
- 記事では、リクエストモジュールをマスターすることができます
- PythonWebクローラーの基本-BeautifulSoup
これで終わりです。それがあなたを助け、好きでフォローすることを歓迎します、あなたの好きは私にとって非常に重要です