当前位置: 移动技术网 > IT编程>脚本编程>Python > 荐 Python爬取公交车数据(一):Requests+JSON网络站点爬取8684公交站点公交站台数据

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

2020年07月07日  | 移动技术网IT编程  | 我要评论

爬取内容分析

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

爬取代码实现

代码

首先呢我们来创建一个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)

运行结果

在这里插入图片描述

清洗代码实现

代码

如果上一步实验没有成功的,可以用蓝奏云文件下载后实现这一步骤
我们首先导入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

这样我们就成功分离了其中的模块
在这里插入图片描述
接下来我们来分离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 = "---")

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

实现效果

在这里插入图片描述
那么运行结果就如上图所示啦

完整代码

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)

本文地址:https://blog.csdn.net/qq_45030271/article/details/107134712

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网