#### 爬取8684上海公交查询网站 https://shanghai.8684.cn/line2 爬取上海每条常规公交线路经过的站点数据,存储于csv或txt文件。保存为4列:公交线路名,上行站点(站点用逗号隔开),下行站点(站点用逗号隔开),站点数(下行+上行)。
时间: 2024-12-04 08:24:16 浏览: 16
了解,为了爬取8684上海公交查询网站的公交车线路信息并将其存储到CSV或TXT文件中,我们需要按照以下步骤操作:
1. **分析网页结构**:
首先,打开`https://shanghai.8684.cn/line2`,查看HTML页面结构,找出包含线路名称、上下行站点信息的部分。通常这类信息会嵌套在表格或列表中。
2. **选择合适的库**:
对于Python,我们可以使用`requests`库来发送HTTP请求获取网页内容,然后使用`BeautifulSoup`或`lxml`等库解析HTML。
3. **编写代码**:
编写一个函数,该函数接受线路ID作为输入,通过`requests.get()`获取指定线路的页面源码,然后用解析库提取出站点信息。上行和下行站点可能会分别在两个表单中,需要合并在一起。
```python
import requests
from bs4 import BeautifulSoup
def parse_bus_route(line_id):
url = f"https://shanghai.8684.cn/line2/{line_id}"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# 解析站点信息部分
up_down_stations = []
# 这里假设站点信息在一个特定的CSS选择器下
station_elements = soup.select(".station-item") # 请替换实际的选择器
for element in station_elements:
up_station = element.find('div', class_='up').text.strip()
down_station = element.find('div', class_='down').text.strip()
if up_station and down_station:
up_down_stations.append((up_station, down_station))
# 合并上行和下行站点
combined_stations = [",".join(stations) for stations in zip(*up_down_stations)]
return {
"路线": line_id,
"上行站点": combined_stations[0],
"下行站点": combined_stations[1],
"总站点数": len(combined_stations[0]) + len(combined_stations[1])
}
# 示例,将结果存储到CSV或TXT文件
def save_to_file(data, filename="bus_routes.csv"):
with open(filename, "w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow(["公交线路名", "上行站点", "下行站点", "站点数"])
writer.writerows([data.values()])
# 获取所有线路的站点信息
lines = range(1, 500) # 假设这里有499条线路
parsed_data = {line_id: parse_bus_route(line_id) for line_id in lines}
# 保存数据
save_to_file(parsed_data)
阅读全文