数据爬取后,如何存储呢,本文将讲解数据存储到excel、txt、数据库的常用操作
这里的结果是直接print出来,如何持久化存储呢
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)
模式 | 描述 |
---|---|
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
with open('text.txt','w') as f:
# 写入单行
f.write()
# 写入多行
f.writelines([])
import csv
with open('bilibili.csv','w',encoding='utf-8',newline='') as f:
# 创建一个写的对象
writer = csv.writer(f)
# 写入单行
writer.writerow([])
# 写入多行
writer.writerows([(),(),()])
对于更为复杂的数据,我们可以存储到数据库中,以mysql为例
pip install pymysql
import pymysql
db = pymysql.connect('IP','username','passwd','DATABASE')
# 连接到Mysql
db = pymysql.connect('localhost','root','123456')
# 连接到Mysql指定数据库
db= pymysql.connect('localhost','root','123456','database')
# 首先连接到数据库
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;''')
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()
以豆瓣电影Top250为例
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()
到这里就结束了,如果对你有帮助你,欢迎点赞关注,你的点赞对我很重要