欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python爬取公交车数据(一):Requests+JSON网络站点爬取8684公交站点公交站台数据

程序员文章站 2022-04-26 11:25:55
...

爬取内容分析

我们首先打开8684手机网页端
Python爬取公交车数据(一):Requests+JSON网络站点爬取8684公交站点公交站台数据
在这里,我输入了B22并准备点击查询,在此之前记得打开开发者模式看一下网页的请求
Python爬取公交车数据(一):Requests+JSON网络站点爬取8684公交站点公交站台数据
我们已经成功请求到了数据
在开发者模式中,我们可以看到它是使用get方法获取数据的
Python爬取公交车数据(一):Requests+JSON网络站点爬取8684公交站点公交站台数据
可以看到这里的headers没有cookies,说明我们不用将cookies给放进去救可以爬取了,还要注意的就是我们的headers,将这两个放进我们的代码中并请求便可以获取数据了
Python爬取公交车数据(一):Requests+JSON网络站点爬取8684公交站点公交站台数据

爬取代码实现

代码

首先呢我们来创建一个headers的处理函数

def GetHeaders(url):
	headers = {
	    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36',
	    'referer': url,
	    'Accept-Language': 'zh-CN,zh;q=0.9',
	}
	return headers

之后导入requests库,并输入以下函数

def Get8684BUS(url):
	rst = requests.get(url,headers = GetHeaders(url))
	rst = rst.text
	rst = rst.encode('utf-8').decode('unicode_escape')

	return rst

最后调用,并保存代码

rst =Get8684BUS("https://api.8684.cn/bus_station_map_station.php?code=1dc114c2&ecity=guangzhou&kind=1")
with open("./8684BUS.txt","w+") as f:
	f.write(rst)

运行结果

Python爬取公交车数据(一):Requests+JSON网络站点爬取8684公交站点公交站台数据

清洗代码实现

代码

如果上一步实验没有成功的,可以用蓝奏云文件下载后实现这一步骤
我们首先导入json库

def Get8684MSG(msg):
	test = json.loads(msg)
	code = test.get("error_code")
	message = test.get("error_message")
	data = test.get("data")
	
	return code,message,data

这样我们就成功分离了其中的模块
Python爬取公交车数据(一):Requests+JSON网络站点爬取8684公交站点公交站台数据
接下来我们来分离data中的数据

def QXData(msg):
	for i in msg:
		lng = i.get("lng")#经度
		lat = i.get("lat")#纬度
		pm = i.get("pm")#站台
		t_name = i.get("t_name")#站台名称
		print(str(lng),str(lat),str(pm),t_name,sep = "---")

在这里呢,因为想不到好的处理方法,便直接打印这一个在控制台输出了

实现效果

Python爬取公交车数据(一):Requests+JSON网络站点爬取8684公交站点公交站台数据
那么运行结果就如上图所示啦

完整代码

8684BUS.py

import requests
import json

def GetHeaders(url):
	headers = {
	    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36',
	    'referer': url,
	    'Accept-Language': 'zh-CN,zh;q=0.9',
	}
	return headers

def Get8684BUS(url):
	rst = requests.get(url,headers = GetHeaders(url))
	rst = rst.text
	rst = rst.encode('utf-8').decode('unicode_escape')

	return rst

def Get8684MSG(msg):
	test = json.loads(msg)
	code = test.get("error_code")
	message = test.get("error_message")
	data = test.get("data")
	
	return code,message,data

def QXData(msg):
	for i in msg:
		lng = i.get("lng")#经度
		lat = i.get("lat")#纬度
		pm = i.get("pm")#站台
		t_name = i.get("t_name")#站台名称
		print(str(lng),str(lat),str(pm),t_name,sep = "---")

rst =Get8684BUS("https://api.8684.cn/bus_station_map_station.php?code=1dc114c2&ecity=guangzhou&kind=1")
with open("./8684BUS.txt","w+") as f:
	f.write(rst)

code,message,data = Get8684MSG(rst)
print(code,message)

QXData(data)