Python爬虫之数据存储
【摘要】 Python爬虫之数据存储
数据爬取后,如何存储呢,本文将讲解数据存储到excel、txt、数据库的常用操作
1.结果输出
这里的结果是直接print出来,如何持久化存储呢
for title,actor,time,score,count,comment in zip(titles,actors,times,scores,counts,com...
Python爬虫之数据存储
数据爬取后,如何存储呢,本文将讲解数据存储到excel、txt、数据库的常用操作
1.结果输出
这里的结果是直接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)
- 1
- 2
- 3
- 4
2. 数据存储
模式 | 描述 |
---|---|
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
2.1 数据存储到txt
with open('text.txt','w') as f: # 写入单行 f.write() # 写入多行 f.writelines([])
- 1
- 2
- 3
- 4
- 5
2.2 数据存储到csv
import csv
with open('bilibili.csv','w',encoding='utf-8',newline='') as f: # 创建一个写的对象
writer = csv.writer(f) # 写入单行
writer.writerow([])
# 写入多行 writer.writerows([(),(),()])
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
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')
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
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;''')
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
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()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
以豆瓣电影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()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
推荐阅读:
- 使用xpath爬取数据
- jupyter notebook使用
- BeautifulSoup爬取豆瓣电影Top250
- 一篇文章带你掌握requests模块
- Python网络爬虫基础–BeautifulSoup
到这里就结束了,如果对你有帮助你,欢迎点赞关注,你的点赞对我很重要
文章来源: blog.csdn.net,作者:北山啦,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq_45176548/article/details/112222080
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)