# Django 自动化爬虫火车票信息
## 思路总结本篇博客将介绍如何使用Django框架实现自动化爬虫来获取火车票信息。我们将使用Selenium库来模拟浏览器行为,使用代理IP来解决封IP问题,并使用BeautifulSoup库来解析网页并提取所需的数据。此外,我们还将设计一个交互界面,使用户可以输入相关参数并获取火车票信息。
## 详细编码实现### 1. 安装必要的库首先,我们需要安装一些必要的库。在终端中运行以下命令来安装所需的库:
```
pip install django selenium beautifulsoup4 pandas```
### 2. 创建Django项目在终端中运行以下命令来创建一个新的Django项目:
```
django-admin startproject train_ticketscd train_tickets```
### 3.Django应用
运行以下命令来创建一个新的Django应用:
```
python manage.py startapp tickets```
### 4. 编写爬虫
在`tickets`应用的目录下,创建一个名为`spider.py`的文件,并在其中编写爬虫代码。以下是一个简单的示例代码:
```pythonfrom selenium import webdriverfrom selenium.webdriver.common.proxy import Proxy, Proxy
from bs4 import BeautifulSoupimport pandas as pddef get_train_tickets(from_station, to_station, date):
# 配置Chrome浏览器驱动程序的路径 driver_path = "path/to/chromedriver"
# 创建Chrome浏览器实例 driver = webdriver.Chrome(driver_path)
# 打开火车票查询网页 url = f"https://www.12306.cn/index/otn/leftTicket/init?linktypeid=dc&fs={from_station}&ts={to_station}&date={date}"
driver.get(url)
# 设置代理IP
proxy = Proxy()
proxy_type = ProxyType.MANUAL
proxy.http_proxy = "ip:port"
# 将代理IP应用于浏览器 capabilities = webdriver.DesiredCapabilities.CHROME proxy.add_to_capabilities(capabilities)
driver = webdriver.Chrome(driver_path, desired_capabilities=capabilities)
# 使用BeautifulSoup解析网页 soup = BeautifulSoup(driver.page_source, "html.parser")
# 根据网页标签和属性提取数据 data_element = soup.find("div", class_="tickets")
data = data_element.text # 关闭浏览器 driver.quit()
return data```
### 5. 编写Django视图函数在`tickets`应用的目录下,打开`views.py`文件,并编写一个Django视图函数来处理用户的请求。以下是一个简单的示例代码:
```pythonfrom django.shortcuts import renderfrom .spider import get_train_ticketsdef search_tickets(request):
if request.method == "POST":
from_station = request.POST.get("from_station")
to_station = request.POST.get("to_station")
date = request.POST.get("date")
# 调用爬虫函数获取火车票信息
tickets_data = get_train_tickets(from_station, to_station, date)
return render(request, "tickets/search_results.html", {"tickets_data": tickets_data})
return render(request, "tickets/search_tickets.html")
```
### 6. 设计交互界面在`tickets`应用的目录下,创建一个名为`templates`的文件夹,并在其中创建一个名为`search_tickets.html`的模板文件,用于显示搜索表单。以下是一个简单的示例代码:
```html
在`templates`文件夹中再创建一个名为`search_results.html`的模板文件,用于显示搜索结果。以下是一个简单的示例代码:
```html
{{ tickets_data }}
### 7. 配置URL路由打开`train_tickets`项目的目录下的`urls.py`文件,并配置URL路由,将用户的请求映射到视图函数。以下是一个简单的示例代码:
```pythonfrom django.contrib import adminfrom django.urls import pathfrom tickets.views import search_ticketsurlpatterns = [
path('admin/', admin.site.urls),
path('search_tickets/', search_tickets, name='search_tickets'),
]
```
## 运行项目在终端中运行以下命令来启动Django开发服务器:
```
python manage.py runserver```
然后在浏览器中访问`http://localhost:8000/search_tickets/`,即可看到搜索火车票的界面。用户可以输入出发站、到达站和日期,点击搜索按钮后,将会显示火车票信息的结果页面。
## 总结本篇博客介绍了如何使用Django框架实现自动化爬虫来获取火车票信息。我们通过使用Selenium库模拟浏览器行为,使用代理IP解决封IP问题,并使用BeautifulSoup库解析网页并提取所需的数据。此外,我们还设计了一个交互界面,使用户可以输入相关参数并获取火车票信息。希望本篇博客能帮助您理解并实现Django自动化爬虫火车票信息的功能。