当前位置:网站首页>太原市公交路线爬取
太原市公交路线爬取
2022-07-29 05:23:00 【赵颂@】
人生苦短,我学Python
# -*- codeing = utf-8 -*-
import requests
from lxml import etree
from fake_useragent import UserAgent
#**列表用来保存所有信息**
items = []
headers ={
"User-Agent":UserAgent().chrome
}
def parse_navigation():
start_url = "https://taiyuan.8684.cn/"
r =requests.get(url=start_url,headers=headers)
**#解析内容获取所有导航链接**
tree =etree.HTML(r.text)
**#获取链接
#以数字开头的**
number_href_list =tree.xpath('//div[@class="bus-layer depth w120"]/div[1]/div/a/@href')
**#字母开头的**
char_href_list =tree.xpath('//div[@class="bus-layer depth w120"]/div[2]/div/a/@href')
**#将返回所有链接**
return number_href_list + char_href_list
def parse_erji_route(content):
tree = etree.HTML(content)
#获取每一个线路链接
route_list = tree.xpath('//div[@class="list clearfix"]/a/@href')
route_name = tree.xpath('//div[@class="list clearfix"]/a/text()')
#遍历,
i = 0
for route in route_list:
print("开始爬取%s的信息" % route_name[i])
#便利每一个路线
route ="https://taiyuan.8684.cn" + route
#发送请求, #获取响应
r =requests.get(url=route,headers=headers)
parse_sanji_route(r.text)
print("结束爬取%s的信息" % route_name[i])
i += 1
def parse_sanji_route(content):
tree =etree.HTML(content)
#抓取想要的内容
#公交信息
bus_num =tree.xpath('//div[@class="info"]/h1/text()')[0]
#获取运行时间:
run_time = tree.xpath('//ul[@class="bus-desc"]/li[1]/text()')[0]
#票价信息
ticket_price_info = tree.xpath('//ul[@class="bus-desc"]/li[2]/text()')[0]
#更新时间
updata_time =tree.xpath('//ul[@class="bus-desc"]/li[4]/text()')[0]
#获取上行总站数
bus_station_list = tree.xpath('//div[@class="bus-excerpt mb15"]/div/div[@class="total"]/text()')
up_total =bus_station_list[0]
#获取上行站名
up_station_name =tree.xpath('//div[@class="bus-lzlist mb15"][1]')
try:
#获取下行总站数
down_total = bus_station_list[1]
# 获取下行站名
down_station_name_list = tree.xpath('//div[@class="bus-lzlist mb15"][2]')
except Exception as error:
down_total = ""
down_station_name_list =[]
#保存每一条公交信息,存放到字典
item ={
"公交名称":bus_num,
"运行时间":run_time,
"票价信息":ticket_price_info,
"更新时间":updata_time,
"上行站数":up_total,
"上行站名":up_station_name,
"下行站数":down_total,
"下行站名":down_station_name_list,
}
items.append(item)
def parse_erji(navi_list):
#遍历列表一次发送请求,获取响应每个页面所有的公交路线
for first_url in navi_list:
print("开始爬取%s所有的公交信息"%first_url)
#拼接完整的链接
first_url = "https://taiyuan.8684.cn" +first_url
#发送请求,获取响应
print(first_url)
r =requests.get(first_url,headers=headers)
content =r.text
#解析内容每一路公交的完整url
parse_erji_route(content)
print("结束爬取%s所有的公交信息" % first_url)
边栏推荐
猜你喜欢
随机推荐
【软件工程之美 - 专栏笔记】20 | 如何应对让人头疼的需求变更问题?
基于51单片机的直流电机调速系统(L298的使用)
DP4301—SUB-1G高集成度无线收发芯片
数论:px+py 不能表示的最大数为pq-p-q的证明
Ml9 self study notes
HAL库学习笔记-13 I2C和SPI的应用
HAL库学习笔记- 8 串口通信之使用
抽象类以及接口
封装——super关键字
【软件工程之美 - 专栏笔记】26 | 持续交付:如何做到随时发布新版本到生产环境?
TLE5012b+STM32F103C8T6(bluepill)读取角度数据
SimpleFOC调参3-PID参数整定攻略
2022春招——芯动科技FPGA开发岗笔试题(原题以及心得)
CV520国产替代Ci521 13.56MHz 非接触式读写器芯片
兼容cc1101/cmt2300-DP4301 SUB-1G 无线收发芯片
SimpleFOC+PlatformIO踩坑之路
HAL库学习笔记- 8 串口通信之概念
STM32 printf问题总结 semihosting microLIB理解
CS4344国产替代DP4344 192K 双通道 24 位 DA 转换器
NRF52832-QFAA 蓝牙无线芯片