Django 自动化爬虫火车票信息

# 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


    Search Train Tickets


   

Search Train Tickets


   

        {% csrf_token %}
       
       

       
       

       
       

       
   



```

在`templates`文件夹中再创建一个名为`search_results.html`的模板文件,用于显示搜索结果。以下是一个简单的示例代码:
```html


    Train Tickets Search Results


   

Train Tickets Search Results


   
{{ 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自动化爬虫火车票信息的功能。

你可能感兴趣的:(python,爬虫,开发语言,selenium)