avatar

爬取火车经停站

准备

  • 导入相关包
1
2
3
4
import requests
import xlwt
import xlrd
from bs4 import BeautifulSoup

自定义函数

  • 获取学生车次号
1
2
3
4
5
6
def getInfo(filename):
dx = xlrd.open_workbook(filename, encoding_override='utf-8')
sheet1 = dx.sheet_by_index(0) # 获取第一张工作表
trips = sheet1.col_values(12) # 第13列为车次信息

return trips # 返回车次列表
  • 根据车次号获取HTML代码
1
2
3
4
5
6
7
8
9
10
11
12
def getHtml(trip):
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36'
}

url = 'https://trains.ctrip.com/trainbooking/TrainSchedule/' + trip

response = requests.get(url, headers)

html = response.text

return html
  • 解析HTML得到经停站
1
2
3
4
5
6
7
8
9
def getTrips(html):
soup = BeautifulSoup(html, 'lxml')
aList = soup.select('td>a') # td节点下的a结点
strTrip = ''

for trip in aList:
strTrip += trip.string + ' '

return strTrip
  • 写入Excel
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def writeInfo(filename,resultTrips):
'resultTrips为每趟车次的停经站的车次字符串列表 '
dx = xlrd.open_workbook(filename, encoding_override='utf-8')
sheet1 = dx.sheet_by_index(0)
names = sheet1.col_values(4) # 得到学生姓名
trips = sheet1.col_values(12) # 得到车次
index = len(names) # 获取需要写入数据的行数
workbook = xlwt.Workbook() # 新建一个工作簿
sheet = workbook.add_sheet('dx1701') # 在工作簿中新建一个表格
for i in range(0, index):
sheet.write(i, 0, names[i]) # 向表格中写入姓名
sheet.write(i, 1, trips[i]) # 向表格中写入车次
sheet.write(i, 2, resultTrips[i]) # 向表格写入停经站
workbook.save('trips.xls') # 保存工作簿
print("xls格式表格写入数据成功!")

运行

  • 主函数
1
2
3
4
5
6
7
8
9
10
11
12
if __name__ == "__main__":
filename = 'idcard.xlsx'
trips = getInfo(filename)
resultTrips = []
for trip in trips:
html = getHtml(trip)
strTrip = getTrips(html)
if not strTrip:
resultTrips.append('没有找到该车次')
continue
resultTrips.append(strTrip)
writeInfo(filename, resultTrips)
文章作者: Gy
文章链接: http://sgyat.cn/2020/05/19/爬取火车经停站/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 年轻没有梦
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论