荐 Python爬取公交车数据(一):Requests+JSON网络站点爬取8684公交站点公交站台数据
程序员文章站
2022-03-30 08:24:04
文章目录爬取内容分析爬取代码实现代码运行结果清洗代码实现代码实现效果完整代码爬取内容分析我们首先打开8684手机网页端在这里,我输入了B22并准备点击查询,在此之前记得打开开发者模式看一下网页的请求我们已经成功请求到了数据在开发者模式中,我们可以看到它是使用get方法获取数据的可以看到这里的headers没有cookies,说明我们不用将cookies给放进去救可以爬取了,还要注意的就是我们的headers,将这两个放进我们的代码中并请求便可以获取数据了爬取代码实现代码首先呢我们来...
爬取内容分析
我们首先打开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
下一篇: 清除浮动