经过努力,我们终于拿到了数据了。那么下一步就是要将我们获取到的数据保存起来了,这样才能给后续的操作(在网页上展示、数据分析挖掘可视化等等)提供便利。

一般我们保存数据可以采用多种可选载体,根据成本、数据用途我们分别采用适合自己的载体保存数据。

  • 主要的数据保存方法有
    • 写入到文本:txt,csv,excel…
    • 保存到数据库:本地的sqlite、MySQL、mongodb…

由于保存到数据库的操作需要了解数据库相关知识以及软件支持,所以我们本章采用多种文本方式写入。

先回顾一下上一节的代码:

import requests
from bs4 import BeautifulSoup  # 从bs4引入BeautifulSoup

#请求网页
# 旧版教程
# url = "https://movie.douban.com/cinema/later/chengdu/"
# response = requests.get(url)

# 2019-12-23更新,解决不能获取到响应的问题
url = "https://movie.douban.com/cinema/later/chengdu/"  # URL不变
# 新增伪装成Chrome浏览器的header
fake_headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36'
}
response = requests.get(url, headers=fake_headers)  # 请求参数里面把假的请求header加上

# 解析网页
# 初始化BeautifulSoup方法一:利用网页字符串自带的编码信息解析网页
soup = BeautifulSoup(response.content.decode('utf-8'), 'lxml')
# 初始化BeautifulSoup方法二:手动指定解析编码解析网页
# soup = BeautifulSoup(response.content, 'lxml', from_encoding='utf-8')

# print(soup)  # 输出BeautifulSoup转换后的内容
all_movies = soup.find('div', id="showing-soon")  # 先找到最大的div
# print(all_movies)  # 输出最大的div的内容
for each_movie in all_movies.find_all('div', class_="item"):  # 从最大的div里面找到影片的div
    # print(each_movie)  # 输出每个影片div的内容
    all_a_tag = each_movie.find_all('a')
    all_li_tag = each_movie.find_all('li')
    movie_name = all_a_tag[1].text
    moive_href = all_a_tag[1]['href']
    movie_date = all_li_tag[0].text
    movie_type = all_li_tag[1].text
    movie_area = all_li_tag[2].text
    movie_lovers = all_li_tag[3].text
    print('名字:{},链接:{},日期:{},类型:{},地区:{}, 关注者:{}'.format(
        movie_name, moive_href, movie_date, movie_type, movie_area, movie_lovers))
  • Python打开文件操作详解
    使用file_obj = open("file_name", 'mode', encoding="encoding")的方法进行操作。
    file_name是你需要读取或者写入的文件路径及文件名("../data/ok.txt"是相对路径打开,如果只写一个"ok.txt",那么就会默认保存到当前.py文件或者.ipynb文件的相同文件夹里面)

    • mode是你指定操作文件的方法,常用的有rwa, r+rbwbabrb+这些方法,r是读取(read,如果不存在则报错),w是写入(write,文件不存在则创建,如果文件存在则覆盖),a是追加写入(文件不存在则创建,文件存在从文件最后开始写入),r+是读取和写入。后面加了个b的,是以二进制方式进行上述操作(通常用于对图片、视频等二进制文件进行操作),mode默认是r。

    • encoding在前面的章节说过了,是我们对文件进行操作所遵循的编码,默认为当前运行环境编码。Windows的默认编码是gbk,linux系统基本上是utf-8。不同的文件可以有不同的编码,设置读取的编码错误要么会报错,要么就得不到正确的内容。

    • file_obj是一个文件对象(Python里面也是万物皆对象,所以不要愁没有对象了),之后我们读取、写入数据都通过这个对象进行操作。

  • Python读取文件方法
    file_obj.read(),一次性读取文件所有的内容作为一个字符串。
    file_obj.readlines(),一次性读取文件所有内容,但每一行作为一个字符串并放在一个list(数组)里面。
    file_obj.readline(limit),从上次读取的行数开始,读取limit行,limit默认为1。该方法通常用在由于文件过大不能一次性读取完毕一个文件的时候)。

  • Python写入文件的方法
    file_obj.write(anystr),该方法接受一个字符串,并将字符串写入。
    file_obj.writelines(list_of_str),该方法接受一个内部全是字符串的list数组,并将所有字符串一行一个写入(自动添加换行符)。

  • 关闭文件
    file_obj.close() 关闭文件对象。打开了一个文件之后要记得关闭,否则可能会出现不可控的问题。但是如果用with方法打开了文件,则不需要手动关闭文件,在with语句块运行结束后,会自动关闭文件。
    示例

# 需要手动关闭文件
file_obj = open("ok.txt", 'r', encoding="utf-8")
content = file_obj.read()
file_obj.close()

# 不需要手动关闭文件
with open("ok.txt", 'r', encoding="utf-8") as file_obj:
    content = file_obj.read()

 

把数据保存到 html 文件

由于txt文件难度较低且所学内容被本小节囊括了,所以我们直接从保存数据到HTML文件开始。
我们的目标是:

网页示例

上面这个截图的网页的代码是这样的(为了简洁美观,所以采用了bootstrap的css样式):




    
    豆瓣电影即将上映影片信息
    


豆瓣电影即将上映影片信息

影片名 上映日期 影片类型 地区 关注者数量
测试名1 测试日期1 测试类型1 测试地区1 测试关注者1
测试名2 测试日期2 测试类型2 测试地区2 测试关注者2

从这个代码,我们可以知道,只要我们重复生成

标签里面的

... 中间的内容,并把我们的数据填进去,数据就会一行一行地被填充到表格中了。

前后的代码我们就只需要复制过来写入就好了。
所以我们就拿着之前的代码开始操作了:
注:python 里面三个"围起来的字符会被看做是一整个字符串,避免了换行符的麻烦。
.format()这个方法的用法是把字符串里面的{}字符,按次序一一替换成 format() 接受的所有参数。

import requests
from bs4 import BeautifulSoup  # 从bs4引入BeautifulSoup

#请求网页
# 旧版教程
# url = "https://movie.douban.com/cinema/later/chengdu/"
# response = requests.get(url)

# 2019-12-23更新,解决不能获取到响应的问题
url = "https://movie.douban.com/cinema/later/chengdu/"  # URL不变
# 新增伪装成Chrome浏览器的header
fake_headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36'
}
response = requests.get(url, headers=fake_headers)  # 请求参数里面把假的请求header加上

 # 初始化BeautifulSoup方法一:利用网页字符串自带的编码信息解析网页
soup = BeautifulSoup(response.content.decode('utf-8'), 'lxml') 

# 初始化BeautifulSoup方法二:手动指定解析编码解析网页
# soup = BeautifulSoup(response.content, 'lxml', from_encoding='utf-8') 

# print(soup)  # 输出BeautifulSoup转换后的内容
all_movies = soup.find('div', id="showing-soon")  # 先找到最大的div
# print(all_movies)  # 输出最大的div的内容

html_file = open('data.html', 'w', encoding="utf-8")
html_file.write("""



    
    豆瓣电影即将上映影片信息
    


豆瓣电影即将上映影片信息

""") for each_movie in all_movies.find_all('div', class_="item"): # 从最大的div里面找到影片的div # print(each_movie) # 输出每个影片div的内容 all_a_tag = each_movie.find_all('a') all_li_tag = each_movie.find_all('li') movie_name = all_a_tag[1].text moive_href = all_a_tag[1]['href'] movie_date = all_li_tag[0].text movie_type = all_li_tag[1].text movie_area = all_li_tag[2].text # 替换字符串里面的 想看 两个字为空,使得更加美观 movie_lovers = all_li_tag[3].text.replace("想看", '') print('名字:{},链接:{},日期:{},类型:{},地区:{}, 关注者:{}'.format( movie_name, moive_href, movie_date, movie_type, movie_area, movie_lovers)) html_file.write(""" """.format(moive_href, movie_name, movie_date, movie_type, movie_area, movie_lovers)) html_file.write("""
影片名 上映日期 影片类型 地区 关注者数量
{} {} {} {} {}
""") html_file.close() print("write_finished!")

运行一下,成功输出。然后我们回到 jupyter 的首页,找到我们的data.html,点击文件名打开网页,就可以看到如下的结果了,并且我们点击这些影片的名字,都会自动跳转到影片的详情页。

写入结果展示

 

数据保存到csv文件

首先介绍一下csv文件,这是个类 txt 的表格文件,读取和写入都相对excel的表格文件更加简单方便,所以在数据领域使用较多。
要使用csv模块,我们首先需要import csv,然后把一个文件对象作为参数传给csv.writer()或者csv.reader(),然后我们就对这个writer/reader进行读写操作了。
写入是调用writer的writerow()方法。writerow方法接受一个由字符串组成的 list 数组,然后就会把这个list的内容按照规定写入到csv文件。
读取则是对reader进行遍历,每一轮遍历的结果返回一行的数据组成的 list数组。

写入示例:

import csv
# Windows默认编码是gbk,如果用utf-8,excel打开可能会乱码
# newline='' 是为了让writer自动添加的换行符和文件的不重复,防止出现跳行的情况
file_obj = open('csvtest.csv', 'w', encoding="gbk", newline='')
writer = csv.writer(file_obj)
a_row = ['你好', 'hello', 'thank', 'you']
row_2 = ['how', 'are', 'you', 'indian', 'mifans']
writer.writerow(a_row)
writer.writerow(row_2)
file_obj.close()
print('finished!')

我们在Windows文件管理器打开当前代码文件夹,(如果没有指定jupyter启动路径并且是以win+x键启动的jupyter,那么jupyter的代码和生成的文件默认是在你的 C:/USER(用户)/username 文件夹里面,username是你的电脑的用户名。)
找到这个csvtest.csv文件(默认就是excel或者wps格式)并打开

运行结果用excel打开

其实文件内容很简单:用,隔开不同的列,一行就是一个新的行:

csv文件内容

读取示例:

import csv
# 读取的编码要和写入的保持一致
file_obj = open('csvtest.csv', 'r', encoding="gbk")
reader = csv.reader(file_obj)
for row in reader:
    print(row)
file_obj.close()
print('finished!')

运行结果输出:

['你好', 'hello', 'thank', 'you']
['how', 'are', 'you', 'indian', 'mifans']
finished!

OK,下一步我们就试着把影片信息存到csv文件中

import csv
import requests
from bs4 import BeautifulSoup  # 从bs4引入BeautifulSoup

# 请求网页
url = "https://movie.douban.com/cinema/later/chengdu/"
response = requests.get(url)
# 初始化BeautifulSoup方法一:利用网页字符串自带的编码信息解析网页
soup = BeautifulSoup(response.content.decode('utf-8'), 'lxml')

# 初始化BeautifulSoup方法二:手动指定解析编码解析网页
# soup = BeautifulSoup(response.content, 'lxml', from_encoding='utf-8')

# print(soup)  # 输出BeautifulSoup转换后的内容
all_movies = soup.find('div', id="showing-soon")  # 先找到最大的div
# print(all_movies)  # 输出最大的div的内容

csv_file = open('data.csv', 'w', encoding="gbk", newline='')
writer = csv.writer(csv_file)

writer.writerow(["影片名", "链接", "上映日期", "影片类型", "地区", "关注者"])  # 写入标题
for each_movie in all_movies.find_all('div', class_="item"):  # 从最大的div里面找到影片的div
    # print(each_movie)  # 输出每个影片div的内容
    all_a_tag = each_movie.find_all('a')
    all_li_tag = each_movie.find_all('li')
    movie_name = all_a_tag[1].text
    moive_href = all_a_tag[1]['href']
    movie_date = all_li_tag[0].text
    movie_type = all_li_tag[1].text
    movie_area = all_li_tag[2].text
    movie_lovers = all_li_tag[3].text.replace("想看", '')
    print('名字:{},链接:{},日期:{},类型:{},地区:{}, 关注者:{}'.format(
        movie_name, moive_href, movie_date, movie_type, movie_area, movie_lovers))
    writer.writerow([movie_name, moive_href, movie_date, movie_type, movie_area, movie_lovers])

csv_file.close()
print("write_finished!")

用excel打开的结果

以上就是一部分常见的对数据的保存方式了。如果能够对你学习Python与爬虫的过程起到一点微小的作用,那将是我的无比荣幸。感谢观看。


 
传送门:

下一章:

  • 爬虫入门教程⑩— 用漂亮的图表展示爬取到的数据

所有的章节:

  • 爬虫入门教程①— 爬虫简介
  • 爬虫入门教程②— 必备知识基础(一)反爬虫简介
  • 爬虫入门教程③— 必备知识基础(二)HTTP请求简介
  • 爬虫入门教程④— 必备知识基础(三)网页的构成
  • 爬虫入门教程⑤— 安装Python
  • 爬虫入门教程⑥— 安装爬虫常用工具包
  • 爬虫入门教程⑦— jupyter与requests的初步使用
  • 爬虫入门教程⑧— BeautifulSoup解析豆瓣即将上映的电影信息
  • [爬虫入门教程⑨— 用html和csv文件保存爬取到的数据]
  • 爬虫入门教程⑩— 用漂亮的图表展示爬取到的数据

推荐阅读更多精彩内容

  • 自学Python之:文件操作(绝对找不到这么完整的教程)
    我是一个学习Python初学者,近期刚学完文件操作。特地分享文章分为两部分,第一部分为文件读取类型以及读取的方式,...
    大熊py阅读 436评论 1赞 8
  • python处理excel--pandas
    一、安装 1:pandas依赖处理Excel的xlrd模块,安装命令是:pip install xlrd2:安装p...
    小啊小狼阅读 695评论 1赞 10
  • [Python与数据分析]-19用Python Pandas合并多个excel(.xlsx)文件
    有时候需要将多个表头一致的文件合并成一个(注意要表头一致,不一致的话,合并之后内容会错开),手动打开所有表一个一个...
    蒸饺与白茶阅读 576评论 0赞 8
  • 数据存储之python下CSV的写入和读取(二)
    数据存储之python下CSV的保存和读取(二) 什么是csv 逗号分隔值(Comma-Separated Val...
    Silence_G阅读 53评论 0赞 1
  • pyecharts全家桶,一招学会python可视化
    pyecharts一直被誉为python可视化的神器,因为它只需较少的代码既可以绘制非常漂亮的图形 今天主要分享一...
    小笨鸟_1d2f阅读 503评论 0赞 3
评论22
赞47
47赞48赞
3赞赏
下载App

{"dataManager":"[]","props":{"isServer":true,"initialState":{"global":{"done":false,"artFromType":null,"fontType":"black","modal":{"ContributeModal":false,"RewardListModal":false,"PayModal":false,"CollectionModal":false,"LikeListModal":false,"ReportModal":false,"QRCodeShareModal":false,"BookCatalogModal":false,"RewardModal":false},"ua":{"value":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36","isIE11":false,"earlyIE":null,"chrome":"58.0","firefox":null,"safari":null,"isMac":false},"$diamondRate":{"displayable":false,"rate":0},"readMode":"day","locale":"zh-CN","seoList":[{"comments_count":1,"public_abbr":"我是一个学习Python初学者,近期刚学完文件操作。特地分享文章分为两部分,第一部分为文件读取类型以及读取的方式,...","share_image_url":"","slug":"0a8bfd756e44","user":{"id":19067920,"nickname":"大熊py","slug":"c6505283dd4b","avatar":"https://upload.jianshu.io/users/upload_avatars/19067920/6682c5f7-6dcb-4b74-a879-7e3d6ea0132b.jpg"},"likes_count":8,"title":"自学Python之:文件操作(绝对找不到这么完整的教程)","id":78860947,"views_count":436},{"comments_count":1,"public_abbr":"一、安装 1:pandas依赖处理Excel的xlrd模块,安装命令是:pip install xlrd2:安装p...","share_image_url":"","slug":"720c6653d9b7","user":{"id":12561298,"nickname":"小啊小狼","slug":"4e23be34d51d","avatar":"https://upload.jianshu.io/users/upload_avatars/12561298/f546503e-7740-492e-8e91-7a1c25cb2427"},"likes_count":10,"title":"python处理excel--pandas","id":79514142,"views_count":695},{"comments_count":0,"public_abbr":"有时候需要将多个表头一致的文件合并成一个(注意要表头一致,不一致的话,合并之后内容会错开),手动打开所有表一个一个...","share_image_url":"","slug":"a3c0c0962cd5","user":{"id":24215864,"nickname":"蒸饺与白茶","slug":"2877a1188242","avatar":"https://upload.jianshu.io/users/upload_avatars/24215864/523c1fc9-8e23-4d1d-a72c-b8c73a0cf45b.jpg"},"likes_count":8,"title":"[Python与数据分析]-19用Python Pandas合并多个excel(.xlsx)文件","id":79513893,"views_count":576},{"comments_count":0,"public_abbr":"数据存储之python下CSV的保存和读取(二) 什么是csv 逗号分隔值(Comma-Separated Val...","share_image_url":"","slug":"97d6cf711576","user":{"id":24907926,"nickname":"Silence_G","slug":"5c1a2f673ea9","avatar":"https://upload.jianshu.io/users/upload_avatars/24907926/570c2823-585f-45b1-8004-8ec0519dcef3.png"},"likes_count":1,"title":"数据存储之python下CSV的写入和读取(二)","id":80071569,"views_count":53},{"comments_count":0,"public_abbr":"pyecharts一直被誉为python可视化的神器,因为它只需较少的代码既可以绘制非常漂亮的图形 今天主要分享一...","share_image_url":"https://upload-images.jianshu.io/upload_images/22435784-6f77b5872ff64916","slug":"28fd84978753","user":{"id":22435784,"nickname":"小笨鸟1d2f","slug":"79d20472dc2f","avatar":"https://upload.jianshu.io/users/upload_avatars/22435784/318cc630-255c-424d-8cbd-bee27c4f1bda"},"likes_count":3,"title":"pyecharts全家桶,一招学会python可视化","id":81916318,"views_count":503}]},"note":{"data":{"is_author":false,"last_updated_at":1577033938,"public_title":"爬虫入门教程⑨— 用html和csv文件保存爬取到的数据","purchased":false,"liked_note":false,"comments_count":22,"free_content":"u003cpu003e经过努力,我们终于拿到了数据了。那么下一步就是要将我们获取到的数据保存起来了,这样才能给后续的操作(u003cemu003e在网页上展示、数据分析挖掘可视化等等u003c/emu003e)提供便利。u003c/pu003enu003cpu003e一般我们保存数据可以采用多种可选载体,根据成本、数据用途我们分别采用适合自己的载体保存数据。u003c/pu003enu003culu003enu003cliu003e主要的数据保存方法有nu003culu003enu003cliu003e写入到文本:txt,csv,excel...u003c/liu003enu003cliu003e保存到数据库:本地的sqlite、MySQL、mongodb...u003c/liu003enu003c/ulu003enu003c/liu003enu003c/ulu003enu003cpu003e由于保存到数据库的操作需要了解数据库相关知识以及软件支持,所以我们本章采用多种文本方式写入。u003c/pu003enu003cpu003e先回顾一下上一节的代码:u003c/pu003enu003cpreu003eu003ccode class="python"u003eimport requestsnfrom bs4 import BeautifulSoup # 从bs4引入BeautifulSoupnn#请求网页n# 旧版教程n# url = "https://movie.douban.com/cinema/later/chengdu/"n# response = requests.get(url)nn# 2019-12-23更新,解决不能获取到响应的问题nurl = "https://movie.douban.com/cinema/later/chengdu/" # URL不变n# 新增伪装成Chrome浏览器的headernfake_headers = {n 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36'n}nresponse = requests.get(url, headers=fake_headers) # 请求参数里面把假的请求header加上nn# 解析网页n# 初始化BeautifulSoup方法一:利用网页字符串自带的编码信息解析网页nsoup = BeautifulSoup(response.content.decode('utf-8'), 'lxml')n# 初始化BeautifulSoup方法二:手动指定解析编码解析网页n# soup = BeautifulSoup(response.content, 'lxml', from_encoding='utf-8')nn# print(soup) # 输出BeautifulSoup转换后的内容nall_movies = soup.find('div', id="showing-soon") # 先找到最大的divn# print(all_movies) # 输出最大的div的内容nfor each_movie in all_movies.find_all('div', class="item"): # 从最大的div里面找到影片的divn # print(each_movie) # 输出每个影片div的内容n all_a_tag = each_movie.find_all('a')n all_li_tag = each_movie.find_all('li')n movie_name = all_a_tag[1].textn moive_href = all_a_tag[1]['href']n movie_date = all_li_tag[0].textn movie_type = all_li_tag[1].textn movie_area = all_li_tag[2].textn movie_lovers = all_li_tag[3].textn print('名字:{},链接:{},日期:{},类型:{},地区:{}, 关注者:{}'.format(n movie_name, moive_href, movie_date, movie_type, movie_area, movie_lovers))nu003c/codeu003eu003c/preu003enu003culu003enu003cliu003enu003cpu003eu003cstrongu003ePython打开文件操作详解u003c/strongu003eu003cbru003en使用u003ccodeu003efile_obj = open("file_name", 'mode', encoding="encoding")u003c/codeu003e的方法进行操作。u003cbru003enu003ccodeu003efile_nameu003c/codeu003e是你需要读取或者写入的文件路径及文件名(u003cemu003e如u003ccodeu003e"../data/ok.txt"u003c/codeu003e是相对路径打开,如果只写一个u003ccodeu003e"ok.txt"u003c/codeu003e,那么就会默认保存到当前.py文件或者.ipynb文件的相同文件夹里面u003c/emu003e)u003c/pu003enu003culu003enu003cliu003eu003cpu003eu003ccodeu003emodeu003c/codeu003e是你指定操作文件的方法,常用的有u003ccodeu003eru003c/codeu003e,u003ccodeu003ewu003c/codeu003e,u003ccodeu003eau003c/codeu003e, u003ccodeu003er+u003c/codeu003e,u003ccodeu003erbu003c/codeu003e,u003ccodeu003ewbu003c/codeu003e,u003ccodeu003eabu003c/codeu003e,u003ccodeu003erb+u003c/codeu003e这些方法,u003ccodeu003eru003c/codeu003e是读取(read,如果不存在则报错),u003ccodeu003ewu003c/codeu003e是写入(write,文件不存在则创建,如果文件存在则覆盖),u003ccodeu003eau003c/codeu003e是追加写入(文件不存在则创建,文件存在从文件最后开始写入),u003ccodeu003er+u003c/codeu003e是读取和写入。后面加了个u003ccodeu003ebu003c/codeu003e的,是以二进制方式进行上述操作(u003cemu003e通常用于对图片、视频等二进制文件进行操作u003c/emu003e),mode默认是r。u003c/pu003eu003c/liu003enu003cliu003eu003cpu003eu003ccodeu003eencodingu003c/codeu003e在前面的章节说过了,是我们对文件进行操作所遵循的编码,默认为当前运行环境编码。Windows的默认编码是u003ccodeu003egbku003c/codeu003e,linux系统基本上是u003ccodeu003eutf-8u003c/codeu003e。不同的文件可以有不同的编码,设置读取的编码错误要么会报错,要么就得不到正确的内容。u003c/pu003eu003c/liu003enu003cliu003eu003cpu003eu003ccodeu003efile_obju003c/codeu003e是一个文件对象(u003cemu003ePython里面也是万物皆对象,所以不要愁没有对象了u003c/emu003e),之后我们读取、写入数据都通过这个对象进行操作。u003c/pu003eu003c/liu003enu003c/ulu003enu003c/liu003enu003cliu003eu003cpu003eu003cstrongu003ePython读取文件方法u003c/strongu003eu003cbru003enu003ccodeu003efile_obj.read()u003c/codeu003e,一次性读取文件所有的内容作为一个字符串。u003cbru003enu003ccodeu003efile_obj.readlines()u003c/codeu003e,一次性读取文件所有内容,但每一行作为一个字符串并放在一个u003cstrongu003elist(数组)u003c/strongu003e里面。u003cbru003enu003ccodeu003efile_obj.readline(limit)u003c/codeu003e,从上次读取的行数开始,读取u003ccodeu003elimitu003c/codeu003e行,limit默认为1。该方法通常用在由于文件过大不能一次性读取完毕一个文件的时候)。u003c/pu003eu003c/liu003enu003cliu003eu003cpu003eu003cstrongu003ePython写入文件的方法u003c/strongu003eu003cbru003enu003ccodeu003efile_obj.write(anystr)u003c/codeu003e,该方法接受一个字符串,并将字符串写入。u003cbru003enu003ccodeu003efile_obj.writelines(list_of_str)u003c/codeu003e,该方法接受一个内部全是字符串的list数组,并将所有字符串一行一个写入(自动添加换行符)。u003c/pu003eu003c/liu003enu003cliu003eu003cpu003eu003cstrongu003e关闭文件u003c/strongu003eu003cbru003enu003ccodeu003efile_obj.close()u003c/codeu003e 关闭文件对象。打开了一个文件之后要记得关闭,否则可能会出现不可控的问题。但是如果用with方法打开了文件,则不需要手动关闭文件,在with语句块运行结束后,会自动关闭文件。u003cbru003en示例u003c/pu003eu003c/liu003enu003c/ulu003enu003cpreu003eu003ccode class="python"u003e# 需要手动关闭文件nfile_obj = open("ok.txt", 'r', encoding="utf-8")ncontent = file_obj.read()nfile_obj.close()nn# 不需要手动关闭文件nwith open("ok.txt", 'r', encoding="utf-8") as file_obj:n content = file_obj.read()nu003c/codeu003eu003c/preu003enu003chru003enu003cpu003e u003c/pu003enu003ch1u003eu003cstrongu003e把数据保存到 html 文件u003c/strongu003eu003c/h1u003enu003cpu003e由于txt文件难度较低且所学内容被本小节囊括了,所以我们直接从保存数据到HTML文件开始。u003cbru003en我们的目标是:u003c/pu003enu003cbru003enu003cdiv class="image-package"u003enu003cdiv class="image-container" style="max-width: 599px; max-height: 226px;"u003enu003cdiv class="image-container-fill" style="padding-bottom: 37.730000000000004%;"u003eu003c/divu003enu003cdiv class="image-view" data-width="599" data-height="226"u003eu003cimg data-original-src="//upload-images.jianshu.io/upload_images/7669036-2a4124b2f8f7172e.png" data-original-width="599" data-original-height="226" data-original-format="image/png" data-original-filesize="18661"u003eu003c/divu003enu003c/divu003enu003cdiv class="image-caption"u003e网页示例u003c/divu003enu003c/divu003enu003cpu003e上面这个截图的网页的代码是这样的(u003cemu003e为了简洁美观,所以采用了bootstrap的css样式u003c/emu003e):u003c/pu003enu003cpreu003eu003ccode class="html"u003eu0026lt;!DOCTYPE htmlu0026gt;nu0026lt;htmlu0026gt;nu0026lt;headu0026gt;n u0026lt;meta charset="UTF-8"u0026gt;n u0026lt;titleu0026gt;豆瓣电影即将上映影片信息u0026lt;/titleu0026gt;n u0026lt;link href="https://cdn.bootcss.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"u0026gt;nu0026lt;/headu0026gt;nu0026lt;bodyu0026gt;nu0026lt;h2 class="text-center"u0026gt;豆瓣电影即将上映影片信息u0026lt;/h2u0026gt;nu0026lt;table class="table table-striped table-hover mx-auto text-center"u0026gt;n u0026lt;theadu0026gt;n u0026lt;tru0026gt;n u0026lt;thu0026gt;影片名u0026lt;/thu0026gt;n u0026lt;thu0026gt;上映日期u0026lt;/thu0026gt;n u0026lt;thu0026gt;影片类型u0026lt;/thu0026gt;n u0026lt;thu0026gt;地区u0026lt;/thu0026gt;n u0026lt;thu0026gt;关注者数量u0026lt;/thu0026gt;n u0026lt;/tru0026gt;n u0026lt;/theadu0026gt;n u0026lt;tbodyu0026gt;n u0026lt;tru0026gt;n u0026lt;tdu0026gt;u0026lt;a href="https://movie.douban.com/subject/30212331/"u0026gt;测试名1u0026lt;/au0026gt;u0026lt;/tdu0026gt;n u0026lt;tdu0026gt;测试日期1u0026lt;/tdu0026gt;n u0026lt;tdu0026gt;测试类型1u0026lt;/tdu0026gt;n u0026lt;tdu0026gt;测试地区1u0026lt;/tdu0026gt;n u0026lt;tdu0026gt;测试关注者1u0026lt;/tdu0026gt;n u0026lt;/tru0026gt;n u0026lt;tru0026gt;n u0026lt;tdu0026gt;u0026lt;a href="https://movie.douban.com/subject/30212331/"u0026gt;测试名2u0026lt;/au0026gt;u0026lt;/tdu0026gt;n u0026lt;tdu0026gt;测试日期2u0026lt;/tdu0026gt;n u0026lt;tdu0026gt;测试类型2u0026lt;/tdu0026gt;n u0026lt;tdu0026gt;测试地区2u0026lt;/tdu0026gt;n u0026lt;tdu0026gt;测试关注者2u0026lt;/tdu0026gt;n u0026lt;/tru0026gt;n u0026lt;/tbodyu0026gt;nu0026lt;/tableu0026gt;nu0026lt;/bodyu0026gt;nu0026lt;/htmlu0026gt;nu003c/codeu003eu003c/preu003enu003cpu003e从这个代码,我们可以知道,只要我们重复生成u0026lt;tbodyu0026gt;标签里面的u003ccodeu003eu0026lt;tru0026gt;...u0026lt;tru0026gt;u003c/codeu003e中间的内容,并把我们的数据填进去,数据就会一行一行地被填充到表格中了。u003ccodeu003eu0026lt;tbodyu0026gt;u003c/codeu003e前后的代码我们就只需要复制过来写入就好了。u003cbru003en所以我们就拿着之前的代码开始操作了:u003cbru003enu003cemu003e注:python 里面三个u003ccodeu003e"u003c/codeu003e围起来的字符会被看做是一整个字符串,避免了换行符的麻烦。u003cbru003enu003ccodeu003e.format()u003c/codeu003e这个方法的用法是把字符串里面的u003ccodeu003e{}u003c/codeu003e字符,按次序一一替换成 format() 接受的所有参数。u003c/emu003eu003c/pu003enu003cpreu003eu003ccode class="python"u003eimport requestsnfrom bs4 import BeautifulSoup # 从bs4引入BeautifulSoupnn#请求网页n# 旧版教程n# url = "https://movie.douban.com/cinema/later/chengdu/"n# response = requests.get(url)nn# 2019-12-23更新,解决不能获取到响应的问题nurl = "https://movie.douban.com/cinema/later/chengdu/" # URL不变n# 新增伪装成Chrome浏览器的headernfake_headers = {n 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36'n}nresponse = requests.get(url, headers=fake_headers) # 请求参数里面把假的请求header加上nn # 初始化BeautifulSoup方法一:利用网页字符串自带的编码信息解析网页nsoup = BeautifulSoup(response.content.decode('utf-8'), 'lxml') nn# 初始化BeautifulSoup方法二:手动指定解析编码解析网页n# soup = BeautifulSoup(response.content, 'lxml', from_encoding='utf-8') nn# print(soup) # 输出BeautifulSoup转换后的内容nall_movies = soup.find('div', id="showing-soon") # 先找到最大的divn# print(all_movies) # 输出最大的div的内容nnhtml_file = open('data.html', 'w', encoding="utf-8")nhtml_file.write("""nu0026lt;!DOCTYPE htmlu0026gt;nu0026lt;htmlu0026gt;nu0026lt;headu0026gt;n u0026lt;meta charset="UTF-8"u0026gt;n u0026lt;titleu0026gt;豆瓣电影即将上映影片信息u0026lt;/titleu0026gt;n u0026lt;link href="https://cdn.bootcss.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"u0026gt;nu0026lt;/headu0026gt;nu0026lt;bodyu0026gt;nu0026lt;h2 class="text-center"u0026gt;豆瓣电影即将上映影片信息u0026lt;/h2u0026gt;nu0026lt;table class="table table-striped table-hover mx-auto text-center"u0026gt;n u0026lt;theadu0026gt;n u0026lt;tru0026gt;n u0026lt;thu0026gt;影片名u0026lt;/thu0026gt;n u0026lt;thu0026gt;上映日期u0026lt;/thu0026gt;n u0026lt;thu0026gt;影片类型u0026lt;/thu0026gt;n u0026lt;thu0026gt;地区u0026lt;/thu0026gt;n u0026lt;thu0026gt;关注者数量u0026lt;/thu0026gt;n u0026lt;/tru0026gt;n u0026lt;/theadu0026gt;n u0026lt;tbodyu0026gt;n""")nfor each_movie in all_movies.find_all('div', class_="item"): # 从最大的div里面找到影片的divn # print(each_movie) # 输出每个影片div的内容n all_a_tag = each_movie.find_all('a')n all_li_tag = each_movie.find_all('li')n movie_name = all_a_tag[1].textn moive_href = all_a_tag[1]['href']n movie_date = all_li_tag[0].textn movie_type = all_li_tag[1].textn movie_area = all_li_tag[2].textn # 替换字符串里面的 想看 两个字为空,使得更加美观n movie_lovers = all_li_tag[3].text.replace("想看", '')n print('名字:{},链接:{},日期:{},类型:{},地区:{}, 关注者:{}'.format(n movie_name, moive_href, movie_date, movie_type, movie_area, movie_lovers))n html_file.write("""n u0026lt;tru0026gt;n u0026lt;tdu0026gt;u0026lt;a href="{}"u0026gt;{}u0026lt;/au0026gt;u0026lt;/tdu0026gt;n u0026lt;tdu0026gt;{}u0026lt;/tdu0026gt;n u0026lt;tdu0026gt;{}u0026lt;/tdu0026gt;n u0026lt;tdu0026gt;{}u0026lt;/tdu0026gt;n u0026lt;tdu0026gt;{}u0026lt;/tdu0026gt;n u0026lt;/tru0026gt;n """.format(moive_href, movie_name, movie_date, movie_type, movie_area, movie_lovers))nhtml_file.write("""n u0026lt;/tbodyu0026gt;nu0026lt;/tableu0026gt;nu0026lt;/bodyu0026gt;nu0026lt;/htmlu0026gt;n""")nhtml_file.close()nprint("write_finished!")nu003c/codeu003eu003c/preu003enu003cpu003e运行一下,成功输出。然后我们回到 jupyter 的首页,找到我们的u003ccodeu003edata.htmlu003c/codeu003e,点击文件名打开网页,就可以看到如下的结果了,并且我们点击这些影片的名字,都会自动跳转到影片的详情页。u003cbru003enu003c/pu003eu003cdiv class="image-package"u003enu003cdiv class="image-container" style="max-width: 632px; max-height: 966px;"u003enu003cdiv class="image-container-fill" style="padding-bottom: 137.97%;"u003eu003c/divu003enu003cdiv class="image-view" data-width="632" data-height="872"u003eu003cimg data-original-src="//upload-images.jianshu.io/upload_images/7669036-366c93c9be44fca9.png" data-original-width="632" data-original-height="872" data-original-format="image/png" data-original-filesize="75028"u003eu003c/divu003enu003c/divu003enu003cdiv class="image-caption"u003e写入结果展示u003c/divu003enu003c/divu003eu003cpu003eu003c/pu003enu003chru003enu003cpu003e u003c/pu003enu003ch1u003e数据保存到csv文件u003c/h1u003enu003cpu003e首先介绍一下csv文件,这是个类 txt 的表格文件,读取和写入都相对excel的表格文件更加简单方便,所以在数据领域使用较多。u003cbru003en要使用csv模块,我们首先需要u003ccodeu003eimport csvu003c/codeu003e,然后把一个文件对象作为参数传给u003ccodeu003ecsv.writer()u003c/codeu003e或者u003ccodeu003ecsv.reader()u003c/codeu003e,然后我们就对这个writer/reader进行读写操作了。u003cbru003en写入是调用writer的u003ccodeu003ewriterow()u003c/codeu003e方法。writerow方法接受一个由字符串组成的 list 数组,然后就会把这个list的内容按照规定写入到csv文件。u003cbru003en读取则是对reader进行遍历,每一轮遍历的结果返回一行的数据组成的 list数组。u003c/pu003enu003cpu003eu003cstrongu003e写入示例:u003c/strongu003eu003c/pu003enu003cpreu003eu003ccode class="python"u003eimport csvn# Windows默认编码是gbk,如果用utf-8,excel打开可能会乱码n# newline='' 是为了让writer自动添加的换行符和文件的不重复,防止出现跳行的情况nfile_obj = open('csvtest.csv', 'w', encoding="gbk", newline='')nwriter = csv.writer(file_obj)na_row = ['你好', 'hello', 'thank', 'you']nrow_2 = ['how', 'are', 'you', 'indian', 'mifans']nwriter.writerow(a_row)nwriter.writerow(row_2)nfile_obj.close()nprint('finished!')nu003c/codeu003eu003c/preu003enu003cpu003e我们在Windows文件管理器打开当前代码文件夹,(u003cemu003e如果没有指定jupyter启动路径并且是以win+x键启动的jupyter,那么jupyter的代码和生成的文件默认是在你的 u003ccodeu003eC:/USER(用户)/usernameu003c/codeu003e 文件夹里面,username是你的电脑的用户名。u003c/emu003e)u003cbru003en找到这个csvtest.csv文件(u003cemu003e默认就是excel或者wps格式u003c/emu003e)并打开u003cbru003enu003c/pu003eu003cdiv class="image-package"u003enu003cdiv class="image-container" style="max-width: 389px; max-height: 211px;"u003enu003cdiv class="image-container-fill" style="padding-bottom: 54.24%;"u003eu003c/divu003enu003cdiv class="image-view" data-width="389" data-height="211"u003eu003cimg data-original-src="//upload-images.jianshu.io/upload_images/7669036-49a3fd0284907562.png" data-original-width="389" data-original-height="211" data-original-format="image/png" data-original-filesize="12263"u003eu003c/divu003enu003c/divu003enu003cdiv class="image-caption"u003e运行结果用excel打开u003c/divu003enu003c/divu003eu003cpu003eu003c/pu003enu003cpu003e其实文件内容很简单:用u003ccodeu003e,u003c/codeu003e隔开不同的列,一行就是一个新的行:u003cbru003enu003c/pu003eu003cdiv class="image-package"u003enu003cdiv class="image-container" style="max-width: 442px; max-height: 173px;"u003enu003cdiv class="image-container-fill" style="padding-bottom: 39.14%;"u003eu003c/divu003enu003cdiv class="image-view" data-width="442" data-height="173"u003eu003cimg data-original-src="//upload-images.jianshu.io/upload_images/7669036-7a14af2c8a390416.png" data-original-width="442" data-original-height="173" data-original-format="image/png" data-original-filesize="10700"u003eu003c/divu003enu003c/divu003enu003cdiv class="image-caption"u003ecsv文件内容u003c/divu003enu003c/divu003eu003cpu003eu003c/pu003enu003cpu003eu003cstrongu003e读取示例:u003c/strongu003eu003c/pu003enu003cpreu003eu003ccode class="python"u003eimport csvn# 读取的编码要和写入的保持一致nfile_obj = open('csvtest.csv', 'r', encoding="gbk")nreader = csv.reader(file_obj)nfor row in reader:n print(row)nfile_obj.close()nprint('finished!')nu003c/codeu003eu003c/preu003enu003cpu003e运行结果输出:u003c/pu003enu003cpreu003eu003ccodeu003e['你好', 'hello', 'thank', 'you']n['how', 'are', 'you', 'indian', 'mifans']nfinished!nu003c/codeu003eu003c/preu003enu003cpu003eOK,下一步我们就试着把影片信息存到csv文件中u003c/pu003enu003cpreu003eu003ccode class="python"u003eimport csvnimport requestsnfrom bs4 import BeautifulSoup # 从bs4引入BeautifulSoupnn# 请求网页nurl = "https://movie.douban.com/cinema/later/chengdu/"nresponse = requests.get(url)n# 初始化BeautifulSoup方法一:利用网页字符串自带的编码信息解析网页nsoup = BeautifulSoup(response.content.decode('utf-8'), 'lxml')nn# 初始化BeautifulSoup方法二:手动指定解析编码解析网页n# soup = BeautifulSoup(response.content, 'lxml', from_encoding='utf-8')nn# print(soup) # 输出BeautifulSoup转换后的内容nall_movies = soup.find('div', id="showing-soon") # 先找到最大的divn# print(all_movies) # 输出最大的div的内容nncsv_file = open('data.csv', 'w', encoding="gbk", newline='')nwriter = csv.writer(csv_file)nnwriter.writerow(["影片名", "链接", "上映日期", "影片类型", "地区", "关注者"]) # 写入标题nfor each_movie in all_movies.find_all('div', class_="item"): # 从最大的div里面找到影片的divn # print(each_movie) # 输出每个影片div的内容n all_a_tag = each_movie.find_all('a')n all_li_tag = each_movie.find_all('li')n movie_name = all_a_tag[1].textn moive_href = all_a_tag[1]['href']n movie_date = all_li_tag[0].textn movie_type = all_li_tag[1].textn movie_area = all_li_tag[2].textn movie_lovers = all_li_tag[3].text.replace("想看", '')n print('名字:{},链接:{},日期:{},类型:{},地区:{}, 关注者:{}'.format(n movie_name, moive_href, movie_date, movie_type, movie_area, movie_lovers))n writer.writerow([movie_name, moive_href, movie_date, movie_type, movie_area, movie_lovers])nncsv_file.close()nprint("write_finished!")nnu003c/codeu003eu003c/preu003enu003cdiv class="image-package"u003enu003cdiv class="image-container" style="max-width: 472px; max-height: 450px;"u003enu003cdiv class="image-container-fill" style="padding-bottom: 95.34%;"u003eu003c/divu003enu003cdiv class="image-view" data-width="472" data-height="450"u003eu003cimg data-original-src="//upload-images.jianshu.io/upload_images/7669036-f2b33c180fd23dbc.png" data-original-width="472" data-original-height="450" data-original-format="image/png" data-original-filesize="95285"u003eu003c/divu003enu003c/divu003enu003cdiv class="image-caption"u003e用excel打开的结果u003c/divu003enu003c/divu003enu003chru003enu003cpu003e以上就是一部分常见的对数据的保存方式了。如果能够对你学习Python与爬虫的过程起到一点微小的作用,那将是我的无比荣幸。感谢观看。u003c/pu003enu003chru003enu003cpu003e u003cbru003en传送门:u003c/pu003enu003cpu003eu003cstrongu003e下一章:u003c/strongu003eu003c/pu003enu003culu003enu003cliu003eu003ca href="https://www.jianshu.com/p/47908cd4f424" target="_blank"u003e爬虫入门教程⑩— 用漂亮的图表展示爬取到的数据u003c/au003eu003c/liu003enu003c/ulu003enu003cpu003eu003cstrongu003e所有的章节:u003c/strongu003eu003c/pu003enu003culu003enu003cliu003eu003ca href="https://www.jianshu.com/p/4f4b5c31c102" target="_blank"u003e爬虫入门教程①— 爬虫简介u003c/au003eu003c/liu003enu003cliu003eu003ca href="https://www.jianshu.com/p/c1b3ccc8987c" target="_blank"u003e爬虫入门教程②— 必备知识基础(一)反爬虫简介u003c/au003eu003c/liu003enu003cliu003eu003ca href="https://www.jianshu.com/p/38ebe6724e51" target="_blank"u003e爬虫入门教程③— 必备知识基础(二)HTTP请求简介u003c/au003eu003c/liu003enu003cliu003eu003ca href="https://www.jianshu.com/p/8cdd2eec2e5f" target="_blank"u003e爬虫入门教程④— 必备知识基础(三)网页的构成u003c/au003eu003c/liu003enu003cliu003eu003ca href="https://www.jianshu.com/p/9c738d7dfa13" target="_blank"u003e爬虫入门教程⑤— 安装Pythonu003c/au003eu003c/liu003enu003cliu003eu003ca href="https://www.jianshu.com/p/6fd531b51a88" target="_blank"u003e爬虫入门教程⑥— 安装爬虫常用工具包u003c/au003eu003c/liu003enu003cliu003eu003ca href="https://www.jianshu.com/p/9cb378ba2c4e" target="_blank"u003e爬虫入门教程⑦— jupyter与requests的初步使用u003c/au003eu003c/liu003enu003cliu003eu003ca href="https://www.jianshu.com/p/c64fe2a20bc9" target="_blank"u003e爬虫入门教程⑧— BeautifulSoup解析豆瓣即将上映的电影信息u003c/au003eu003c/liu003enu003cliu003e[爬虫入门教程⑨— 用html和csv文件保存爬取到的数据]u003c/liu003enu003cliu003eu003ca href="https://www.jianshu.com/p/47908cd4f424" target="_blank"u003e爬虫入门教程⑩— 用漂亮的图表展示爬取到的数据u003c/au003eu003c/liu003enu003c/ulu003en","voted_down":false,"rewardable":true,"show_paid_comment_tips":false,"share_image_url":"https://upload-images.jianshu.io/upload_images/7669036-366c93c9be44fca9.png","slug":"011abdcee7e4","user":{"liked_by_user":false,"following_count":743,"gender":1,"avatar_widget":null,"slug":"9f41384606fa","intro":"程序猿/熬夜党/python/前端 大学生","likes_count":650,"nickname":"终可见丶","badges":[],"total_fp_amount":"120655788905286502183","wordage":43851,"avatar":"https://upload.jianshu.io/users/upload_avatars/7669036/1f2a16a1-f201-414c-8f2e-7c0e978896f0","id":7669036,"liked_user":false},"likes_count":47,"paid_type":"free","show_ads":true,"paid_content_accessible":false,"total_fp_amount":"1482000000000000000","trial_open":false,"reprintable":true,"bookmarked":false,"wordage":1897,"featured_comments_count":0,"downvotes_count":0,"wangxin_trial_open":null,"guideShow":{"audit_user_nickname_spliter":0,"pc_note_bottom_btn":1,"pc_like_author_guidance":0,"ban_some_labels":1,"audit_user_background_image_spliter":0,"audit_note_spliter":0,"launch_tab":0,"include_post":0,"pc_login_guidance":1,"audit_comment_spliter":1,"recommend_reason":1,"pc_note_bottom_qrcode":0,"audit_user_avatar_spliter":0,"audit_collection_spliter":0,"subscription_guide_entry":1,"creation_muti_function_on":1,"explore_score_searcher":1,"audit_user_spliter":1,"pc_note_popup":0},"commentable":true,"total_rewards_count":3,"id":28000176,"notebook":{"name":""},"activity_collection_slug":null,"description":"经过努力,我们终于拿到了数据了。那么下一步就是要将我们获取到的数据保存起来了,这样才能给后续的操作(在网页上展示、数据分析挖掘可视化等等)提供便利。 一般我们保存数据可以采用...","first_shared_at":1526200758,"views_count":14445,"notebook_id":24329689},"baseList":{"likeList":[],"rewardList":[]},"status":"success","statusCode":0},"user":{"isLogin":false,"userInfo":{}},"comments":{"list":[],"featuredList":[]}},"initialProps":{"pageProps":{"query":{"slug":"011abdcee7e4"}},"localeData":{"common":{"jianshu":"简书","diamond":"简书钻","totalAssets":"总资产{num}","diamondValue":" (约{num}元)","login":"登录","logout":"注销","register":"注册","on":"开","off":"关","follow":"关注","followBook":"关注连载","following":"已关注","cancelFollow":"取消关注","publish":"发布","wordage":"字数","audio":"音频","read":"阅读","reward":"赞赏","zan":"赞","comment":"评论","expand":"展开","prevPage":"上一页","nextPage":"下一页","floor":"楼","confirm":"确定","delete":"删除","report":"举报","fontSong":"宋体","fontBlack":"黑体","chs":"简体","cht":"繁体","jianChat":"简信","postRequest":"投稿请求","likeAndZan":"喜欢和赞","rewardAndPay":"赞赏和付费","home":"我的主页","markedNotes":"收藏的文章","likedNotes":"喜欢的文章","paidThings":"已购内容","wallet":"我的钱包","setting":"设置","feedback":"帮助与反馈","loading":"加载中...","needLogin":"请登录后进行操作","trialing":"文章正在审核中...","reprintTip":"禁止转载,如需转载请通过简信或评论联系作者。"},"error":{"rewardSelf":"无法打赏自己的文章哟~"},"message":{"paidNoteTip":"付费购买后才可以参与评论哦","CommentDisableTip":"作者关闭了评论功能","contentCanNotEmptyTip":"回复内容不能为空","addComment":"评论发布成功","deleteComment":"评论删除成功","likeComment":"评论点赞成功","setReadMode":"阅读模式设置成功","setFontType":"字体设置成功","setLocale":"显示语言设置成功","follow":"关注成功","cancelFollow":"取消关注成功","copySuccess":"复制代码成功"},"header":{"homePage":"首页","download":"下载APP","discover":"发现","message":"消息","reward":"赞赏支持","editNote":"编辑文章","writeNote":"写文章"},"note":{},"noteMeta":{"lastModified":"最后编辑于 ","wordage":"字数 {num}","viewsCount":"阅读 {num}"},"divider":{"selfText":"以下内容为付费内容,定价 ¥{price}","paidText":"已付费,可查看以下内容","notPaidText":"还有 {percent} 的精彩内容","modify":"点击修改"},"paidPanel":{"buyNote":"支付 ¥{price} 继续阅读","buyBook":"立即拿下 ¥{price}","freeTitle":"该作品为付费连载","freeText":"购买即可永久获取连载内的所有内容,包括将来更新的内容","paidTitle":"还没看够?拿下整部连载!","paidText":"永久获得连载内的所有内容, 包括将来更新的内容"},"book":{"last":"已是最后","lookCatalog":"查看连载目录","header":"文章来自以下连载"},"action":{"like":"{num}人点赞","collection":"收入专题","report":"举报文章"},"comment":{"allComments":"全部评论","featuredComments":"精彩评论","closed":"评论已关闭","close":"关闭评论","open":"打开评论","desc":"按时间倒序","asc":"按时间正序","disableText1":"用户已关闭评论,","disableText2":"与Ta简信交流","placeholder":"写下你的评论...","publish":"发表","create":" 添加新评论","reply":" 回复","restComments":"还有{num}条评论,","expandImage":"展开剩余{num}张图","deleteText":"确定要删除评论么?"},"collection":{"title":"被以下专题收入,发现更多相似内容","putToMyCollection":"收入我的专题"},"seoList":{"title":"推荐阅读","more":"更多精彩内容"},"sideList":{"title":"推荐阅读"},"wxShareModal":{"desc":"打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮"},"bookChapterModal":{"try":"试读","toggle":"切换顺序"},"collectionModal":{"title":"收入到我管理的专题","search":"搜索我管理的专题","newCollection":"新建专题","create":"创建","nothingFound":"未找到相关专题","loadMore":"展开查看更多"},"contributeModal":{"search":"搜索专题投稿","newCollection":"新建专题","addNewOne":"去新建一个","nothingFound":"未找到相关专题","loadMore":"展开查看更多","managed":"我管理的专题","recommend":"推荐专题"},"QRCodeShow":{"payTitle":"微信扫码支付","payText":"支付金额"},"rewardModal":{"title":"给作者送糖","custom":"自定义","placeholder":"给Ta留言...","choose":"选择支付方式","balance":"简书余额","tooltip":"网站该功能暂时下线,如需使用,请到简书App操作","confirm":"确认支付","success":"赞赏成功"},"payModal":{"payBook":"购买连载","payNote":"购买文章","promotion":"优惠券","promotionFetching":"优惠券获取中...","noPromotion":"无可用优惠券","promotionNum":"{num}张可用","noUsePromotion":"不使用优惠券","validPromotion":"可用优惠券","invalidPromotion":"不可用优惠券","total":"支付总额","tip1":"· 你将购买的商品为虚拟内容服务,购买后不支持退订、转让、退换,请斟酌确认。","tip2":"· 购买后可在“已购内容”中查看和使用。","success":"购买成功"},"reportModal":{"ad":"广告及垃圾信息","plagiarism":"抄袭或未授权转载","placeholder":"写下举报的详情情况(选填)","success":"举报成功"},"guidModal":{"modalAText":"相似文章推荐","subText":"下载简书APP,浏览更多相似文章","btnAText":"先不下载,下次再说","followOkText":"关注作者成功!","followTextTip":"下载简书APP,作者更多精彩内容更新及时提醒!","followBtn":"下次再说","downloadTipText":"更多精彩内容下载简书APP","footerDownLoadText":"下载简书APP","modabTitle":"免费送你2次抽奖机会","modalbTip":"你有很大概率抽取AirPods Pro","modalbFooterTip":"下载简书APP,天天参与抽大奖","modalReward":"抽奖","scanQrtip":"扫码下载简书APP","downloadAppText":"下载简书APP,随时随地发现和创作内容","redText":"阅读","likesText":"赞","downLoadLeft":"下载App"}},"currentLocale":"zh-CN","asPath":"/p/011abdcee7e4"}},"page":"/p/[slug]","query":{"slug":"011abdcee7e4"},"buildId":"u2bo4IW2hHO5mrSY24vYe","assetPrefix":"https://cdn2.jianshu.io/shakespeare"}



文章来源于互联网:爬虫入门教程⑨— 用html和csv文件保存爬取到的数据

发表评论