用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()