用python爬取城市公交路线及站点

在Python中,可以通过requests、Beautiful Soup和Selenium等工具来爬取城市公交路线及站点数据。下面是大致的步骤:

1. 确定数据源:找到能提供需要的公交路线及站点数据的网站,比如百度地图、高德地图、公交查询网站等。

2. 分析渲染方式:确定目标网站使用的渲染方式,一般采用静态网页或动态网页,如JS渲染,对应不同的爬虫工具进行处理。

3. 使用requests和Beautiful Soup爬取静态网站:使用requests库发送get请求并获取响应页面内容,然后使用Beautiful Soup进行HTML页面解析,并定位需要的路线及站点信息。

4. 使用Selenium和ChromeDriver爬取动态网站:Selenium可以模拟浏览器请求,从而实现对动态渲染的网页抓取。同时,还需要下载ChromeDriver驱动程序或其他浏览器的驱动程序,安装相应的浏览器,使用selenium进行模拟登陆并进行路线及站点数据爬取。

注意事项:
- 在爬取公共交通线路及站点数据时,要注意相关法律法规的合规性;
- 需要模仿人类正常操作行为进行爬取,不能频繁刷新、提交请求等,以免被封IP地址;
- 数据量庞大,需考虑有效管理及存储方式。

import requests
from bs4 import BeautifulSoup

# 定义请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}

# 发送requests请求
url = 'http://www.xxx.com/busline'
response = requests.get(url, headers=headers)

# 解析响应页面内容,提取需要的路线及站点信息
soup = BeautifulSoup(response.text, 'lxml')
bus_lines = soup.find_all('div', class_='bus-line')
for bus_line in bus_lines:
    line_name = bus_line.find('h3').text
    stations = bus_line.find_all('p', class_='station')
    station_names = [station.a.text for station in stations]
    print(line_name, station_names)
 

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

url = 'http://www.xxx.com/busquery.aspx'
driver = webdriver.Chrome() #需下载对应chrome驱动程序

# 打开目标网站,并模拟搜索操作
driver.get(url)
search_input = driver.find_element(By.ID, 'searchText')
search_input.clear()
search_input.send_keys("公交路线")
search_btn = driver.find_element(By.ID, 'searchButton')
search_btn.click()

# 加载页面,并定位路线及站点信息,进行数据解析
time.sleep(3) #等待页面渲染完成
bus_lines = driver.find_elements(By.CSS_SELECTOR, '.bus-line')
for bus_line in bus_lines:
    line_name = bus_line.find_element(By.CSS_SELECTO,r 'h3').text
    stations = bus_line.find_elements(By.CSS_SELECTOR, 'p.station')
    station_names = [station.find_element(By.TAG_NAME, 'a').text for station in stations]
    print(line_name, station_names)

# 关闭浏览器
driver.quit()

 

你可能感兴趣的:(python,爬虫,开发语言)