精简化爬虫流程(爬取+部署)
本篇博客主要爬取豆瓣电影部分电影数据,以JSON数据格式保存,并将爬取到的数据部署到本地接口服务器上。使用的技术主要有:
- requests
- JSON-server
- npm
如果还有小伙伴电脑中没有npm安装方式,可以点击此链接进行安装:node.js安装详解
一、爬取数据
凡是涉及爬取数据,爬取过程无非就是:
- 声明爬取URL,设置请求头
- 发送请求后,服务器获取请求,返回响应
- 解析数据
- 保存数据
以下将根据这4个步骤详细说明爬取的流程。
1、声明URL和请求头
url = "https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=0&limit=760"
headers = {
"User-Agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 80.0.3987.163Safari / 537.36",
}
那么这两个声明如何获取呢?
我们以爬取豆瓣电影分类界面为例进行说明:界面链接
我们打开检查,找到动态请求的数据
然后我们去获取请求网页的URL和请求头,在这一步留意一下请求方式是GET,为下一步请求做准备。
我们留意到该URL有一点特殊,注意最后start=0&limit=20,这是获取前19条电影信息,我们想到如果我们修改这个取值范围,是不是就可以获取更多数据,通过实验果然如我们所想,仅是修改URL就能实现滑动翻页获取新的数据。
2、发送请求
前面我们注意到该URL的请求方式是GET方式,返回的数据是JSON型数据。
response = requests.get(url = url, headers = headers)
3、解析数据
我们将服务器返回的数据响应做进一步解析和数据封装,在原有的数据上加上number序号和name名称。
def getData(response):
data = {}
datalist = {}
number = {}
name = {}
number.setdefault('number', 0)
name.setdefault('name', '剧情类')
datalist.setdefault('number', number)
datalist.setdefault('name', name)
datalist.setdefault('list', response.json())
data.setdefault('data',datalist)
return data
4、保存数据
将数据保存到同层级目录下,名称为“db_movie.json”。
def saveData(datalist):
with open('.\db_movie.json','w',encoding = 'utf-8') as fp:
json.dump(datalist,fp = fp, ensure_ascii= False,sort_keys = True)
二、源码
import requests
import json
# 发起请求,获取数据
def askURL():
url = "https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=&start=0&limit=760"
headers = {
"User-Agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 80.0.3987.163Safari / 537.36",
}
response = requests.get(url = url, headers = headers)
# print(response.json())
datalist = getData(response)
# print(datalist)
return datalist
# 解析数据
def getData(response):
datalist = {}
number = {}
name = {}
number.setdefault('number', 0)
name.setdefault('name', '剧情类')
datalist.setdefault('number', number)
datalist.setdefault('name', name)
datalist.setdefault('list', response.json())
return datalist
# 保存数据
def saveData(datalist):
with open('.\db_movie.json','w',encoding = 'utf-8') as fp:
json.dump(datalist,fp = fp, ensure_ascii= False,sort_keys = True)
# 主功能函数
def main():
datalist = askURL()
saveData(datalist)
if __name__ == '__main__':
main()
三、本地接口部署
1、首先运行win+R,全局安装json-server
npm install -g json-server
2、然后进入到我们的项目目录下,初始化packjson文件,具体指令如下:
npm init
依次填写项目名称、描述、作者,其余部分按默认回车即可
3、输入以下指令,安装json-server
npm install json-server –save
4、使用vscode打开项目文件夹,配置启动项。
将我们之前爬取保存为JSON数据格式的文件复制过来,并在package.json文件下设置json-server启动快捷方式。
在scripts下,设置
"json-server":"json-server --watch db.json"
5、启动服务
在中断输入以下指令启动服务。
npm run json-server
在此界面我们看到我们的数据目录data显示在本地接口上,请求方式有GET、POST、PUT、PATCH等。