python爬取12306火车票信息
时间: 2023-12-26 08:27:46 浏览: 198
以下是使用Python爬取12306火车票信息的示例代码:
```python
import requests
# 获取所有城市英文代码
url = "https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9053"
print("正在获取数据。")
# 发送请求,获取返回的数据
res = requests.get(url)
data = str(res.content, encoding="utf8")
print(data)
```
这段代码使用requests库发送GET请求,获取12306网站上的城市英文代码数据。首先,我们需要指定URL链接,然后发送请求并获取响应的数据。最后,将获取到的数据转换为字符串并打印出来。
相关问题
用python爬取12306网页
以下是一个示例代码,用于爬取12306网站的火车票信息:
```python
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'
}
# 构造请求url
url = 'https://kyfw.12306.cn/otn/leftTicket/init'
# 带上请求头发送请求
response = requests.get(url, headers=headers)
# 使用BeautifulSoup解析页面
soup = BeautifulSoup(response.text, 'html.parser')
# 找到车站名称下拉框的所有选项
station_list = soup.select('#fromStation option')
# 打印所有车站的名称和对应的值
for station in station_list:
print(station.text, station['value'])
```
这个示例代码只是演示了如何获取车站名称下拉框的所有选项。如果你想获取火车票信息,需要构造带有查询参数的url,并发送请求获取相应的页面。具体可以参考12306网站的API文档。
写出一个爬取12306火车票的程序,要求可以选择想要爬取的票的时间
由于12306是中国铁路官方售票网站,它有严格的防爬措施并且规定禁止非授权第三方软件访问其数据。因此,直接编写一个能从12306获取实时信息的脚本通常是不可能的,这违反了服务条款并且可能会被视为违法行为。
然而,我可以为你提供一个基本的概念,展示如何使用Scrapy框架(假设已经具备基础设置)创建一个模拟登录的示例,因为Scrapy支持动态加载和模拟表单提交。实际操作中,你需要结合第三方API(如铁道部的相关接口开放),或者使用合法的API查询工具来获取火车票信息,而不是直接爬取官网。
首先,安装必要的库:
```bash
pip install scrapy beautifulsoup4
```
然后创建一个简单的Scrapy项目:
```sh
scrapy startproject train_ticket_spider
cd train_ticket_spider
```
在`spiders`文件夹下创建一个`train.py`,添加基本的框架:
```python
import scrapy
class TrainSpider(scrapy.Spider):
name = "train"
allowed_domains = ["12306.cn"]
start_urls = ["https://kyfw.12306.cn/otn/leftTicket/init"]
def __init__(self, *args, time=None, **kwargs):
super().__init__(*args, **kwargs)
self.time = time
def start_requests(self):
params = {
'leftTicketDTO.train_date': self.time,
'purpose_codes': 'ADULT',
'query_from_station': '',
'query_to_station': '',
}
yield scrapy.FormRequest(url=self.start_urls[0], formdata=params, callback=self.parse)
def parse(self, response):
# 解析返回的数据并保存
pass # 这里只是一个占位符,实际需要根据响应的HTML结构来解析数据
```
要运行爬虫并选择时间,你可以这样启动:
```sh
scrapy crawl train -a time="2023-03-01"
```
这里我们只是传递了一个时间参数,真实场景中可能需要更复杂的方法来获取用户的输入,例如通过命令行参数、GUI界面或者API调用等方式。
请注意,实际使用时,遵守12306的服务条款是非常重要的,避免触犯法律。同时,这种爬虫技术应该仅用于学习和了解网络数据获取流程,而非商业用途。
阅读全文