Python爬虫之数据存储

举报
北山啦 发表于 2021/05/26 13:03:30 2021/05/26
【摘要】 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

推荐阅读:

  1. 使用xpath爬取数据
  2. jupyter notebook使用
  3. BeautifulSoup爬取豆瓣电影Top250
  4. 一篇文章带你掌握requests模块
  5. Python网络爬虫基础–BeautifulSoup

到这里就结束了,如果对你有帮助你,欢迎点赞关注,你的点赞对我很重要

文章来源: beishan.blog.csdn.net,作者:北山啦,版权归原作者所有,如需转载,请联系作者。

原文链接:beishan.blog.csdn.net/article/details/112222080

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200