python爬取12306
时间: 2023-12-16 20:28:07 浏览: 143
以下是使用Python爬取12306网站的步骤和注意事项:
1. 首先需要安装requests和BeautifulSoup库,可以使用pip命令进行安装。
2. 使用requests库发送HTTP请求,获取12306网站的HTML源代码。
3. 使用BeautifulSoup库解析HTML源代码,提取需要的信息。
4. 由于12306网站有反爬机制,需要使用一些反反爬技术,例如设置请求头、使用代理IP等。
5. 可以使用selenium库模拟浏览器行为,实现自动化爬取。
6. 注意不要频繁发送请求,以免被封IP。
以下是一个简单的示例代码,可以爬取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'}
# 发送HTTP请求,获取HTML源代码
url = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2022-01-01&leftTicketDTO.from_station=BJP&leftTicketDTO.to_station=SHH&purpose_codes=ADULT'
response = requests.get(url, headers=headers)
html = response.text
# 解析HTML源代码,提取车票信息
soup = BeautifulSoup(html, 'html.parser')
tickets = soup.select('tr[data-trace]')
for ticket in tickets:
train_no = ticket['data-trainno']
from_station = ticket['data-fromstation']
to_station = ticket['data-tostation']
start_time = ticket.select_one('.start-t')['title']
end_time = ticket.select_one('.end-t')['title']
duration = ticket.select_one('.ls-duration').text
price = ticket.select_one('.ticket-price').text
print(train_no, from_station, to_station, start_time, end_time, duration, price)
```
阅读全文