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

爬取内容分析

我们首先打开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)
  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

地摊主老袁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值