Python爬虫之数据存储

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)

2. 数据存储

模式 描述
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

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()

以豆瓣电影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. 使用xpath爬取数据
  2. jupyter notebook使用
  3. BeautifulSoup爬取豆瓣电影Top250
  4. 一篇文章带你掌握requests模块
  5. Python网络爬虫基础–BeautifulSoup

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

猜你喜欢

转载自blog.csdn.net/qq_45176548/article/details/112222080
今日推荐