python bs4 csv requests 爬虫 爬取携程火车票网址信息并保存

本文介绍了如何使用Python的bs4和requests库爬取携程火车票的单程与中转信息,并通过csv保存数据。通过parse.quote进行URL转码,利用random.choice设置User Agent,中转信息从json文件获取。爬虫实现过程相对简单,适合初学者练习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的:爬取携程网址

火车 中的单程与中转

单程
url=“https://trains.ctrip.com/trainbooking/search?tocn=%25e5%258d%2583%25e5%25b2%259b%25e6%25b9%2596&fromcn=%25e6%259d%25ad%25e5%25b7%259e&day=2020-12-31”
中转
url=“https://trains.ctrip.com/pages/booking/hubSingleTrip?ticketType=2&fromCn=%25E6%259D%25AD%25E5%25B7%259E&toCn=%25E5%258D%2583%25E5%25B2%259B%25E6%25B9%2596&departDate=2020-12-31”
采用parse.quote()进行url转码
采用csv进行数据保存
random.choice进行选择一个User Agent 自认为这是个不错的习惯
携程单程信息在原网页源代码中
携程中转网址火车中中转信息保存在json文件中(js_url)

LET’S GO

url="https://trains.ctrip.com/pages/booking/hubSingleTrip?ticketType=5&fromCn=%25E6%259D%25AD%25E5%25B7%259E&toCn=%25E6%2596%25B0%25E4%25B9%25A1&departDate=2020-12-30" #  携程单程火车原网址 查询参数 fromcn 出发站 tocn 目的站 departDate 日期
#原网页查询参数需要进行两次url编码(注意点1)
#携程单程信息在原网页源代码中
'''
url="https://trains.ctrip.com/pages/booking/hubSingleTrip?ticketType=2&fromCn=%25E6%259D%25AD%25E5%25B7%259E&toCn=%25E5%258D%2583%25E5%25B2%259B%25E6%25B9%2596&departDate=2020-12-31"
js_url="https://trains.ctrip.com/pages/booking/getTransferList?departureStation=%2525E6%25259D%2525AD%2525E5%2525B7%25259E&arrivalStation=%2525E6%252596%2525B0%2525E4%2525B9%2525A1&departDateStr=2020-12-30"    
携程中转网址火车中中转信息保存在json文件中(js_url) 查询参数departureStation arrivalStation departDateStr
类似稍加自己比较即可发现
js_url查询参数需要进行三次url编码(注意点2)
'''

from urllib import parse
import random
from bs4 import BeautifulSoup
import  csv
import os
import requests
# print(parse.unquote((parse.unquote("%25E6%259D%25AD%25E5%25B7%259E"))))
fromArea = input("出发站")
toArea = input("目的站")
date=input("年-月-日 :")
if not os.path.exists("D:/携程查找练习"):#创建后续保存文件
    os.mkdir("D:/携程查找练习")
class NewsByTransfer():#该类用于爬取中转的信息
    def __init__(self):#初始化
        self.fromArea=fromArea
        self.toArea=toArea
        self.date=date
    def getOneJsUrl(self,fromArea,toArea,date):#进行js_url拼接
        fromArea=parse.quote(parse.quote(fromArea))
        departureStation=parse.quote(fromArea)
        toArea=parse.quote(parse.quote(toArea))
        arrivalStation=parse.quote(toArea)
        url="https://trains.ctrip.com/pages/booking/hubSingleTrip?ticketType=5&fromCn="+fromArea+"&toCn="+toArea #原网页
        js_url="https://trains.ctrip.com/pages/booking/getTransferList?departureStation="+departureStation+"&arrivalStation="+arrivalStation
        js_url=js_url+"&departDateStr="+date
        # print(url)
        print(js_url)
        return js
好的,我可以为您编写Python爬虫程序来爬取携程网广州塔的评论,将其输入到CSV文件中。以下是代码示例: ```python import requests import csv from bs4 import BeautifulSoup url = "https://piao.ctrip.com/thingstodo-booking-bookingwebapi/api/comment" # 设置请求参数 data = { "poiID": "13122", # 广州塔的poi ID "districtId": "100", # 广州市的区域ID "pagenum": "1", # 第一页评论 "pageSize": "10", # 每页10条评论 "contentType": "json", "sortType": "3", "isPageScrolling": "false", "head": { "locale": "cn", "cid": "09031191312047955705", "ctok": "", "cver": "1.0", "lang": "01", "sid": "8888", "syscode": "09", "auth": "", "extension": [] } } 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" } response = requests.post(url, json=data, headers=headers) content = response.json() # 解析评论内容 comments = [] if content["data"]["comments"]: for comment in content["data"]["comments"]: comment_data = { "user": comment["authorName"], # 用户名 "content": comment["content"], # 评论内容 "score": comment["score"], # 评分 "time": comment["date"], # 评论时间 } comments.append(comment_data) # 将评论数据写入CSV文件 with open("comments.csv", "w", newline="", encoding="utf-8") as f: writer = csv.DictWriter(f, fieldnames=["user", "content", "score", "time"]) writer.writeheader() writer.writerows(comments) print("爬取完成") ``` 请将以上代码复制到您的Python文件中,然后执行即可爬取保存评论数据。请注意,代码中的`poiID`和`districtId`分别为广州塔和广州市的ID,您需要根据实际情况进行修改。另外,请确保您已经安装了`requests`、`beautifulsoup4`和`pandas`等必要的Python库。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值