帮我写一份爬虫爬取机票的详细信息要求多线程
时间: 2023-07-21 09:46:07 浏览: 194
好的,以下是一个简单的 Python 多线程爬虫爬取机票详细信息的示例代码。这里以爬取携程网的机票信息为例。
首先,我们需要分析携程网的网页结构,找到需要爬取的数据。打开携程网的机票页面,我们可以看到每个航班的详细信息都包含在一个 `<li>` 标签中,里面包含了航班号、起飞时间、到达时间、起飞机场、到达机场、航班时长、航空公司、机型、票价等信息。所以我们可以通过解析每个 `<li>` 标签来获取航班的详细信息。
接下来,我们需要使用 Python 的 requests 库来发送 HTTP 请求,并使用 lxml 库来解析 HTML。由于我们要爬取多个页面,因此需要使用多线程来加速爬取。
```python
import requests
from lxml import etree
from queue import Queue
from threading import Thread
# 定义线程数
thread_count = 5
# 定义要爬取的机场代码
airports = ["sha", "bjs", "ctu", "szx"]
# 创建队列,用于存储需要爬取的网址
queue = Queue()
for airport in airports:
url = f"https://flights.ctrip.com/schedule/{airport}.html"
queue.put(url)
# 定义线程的执行函数
def crawl(queue):
while not queue.empty():
url = queue.get()
response = requests.get(url)
html = response.content
tree = etree.HTML(html)
# 解析每个航班的详细信息
flight_list = tree.xpath('//ul[@class="flight_list"]/li')
for flight in flight_list:
flight_no = flight.xpath('.//div[@class="f-num"]/text()')[0]
dep_time = flight.xpath('.//div[@class="f-time"]/strong[1]/text()')[0]
arr_time = flight.xpath('.//div[@class="f-time"]/strong[2]/text()')[0]
dep_airport = flight.xpath('.//div[@class="f-info"]/span[1]/text()')[0]
arr_airport = flight.xpath('.//div[@class="f-info"]/span[2]/text()')[0]
duration = flight.xpath('.//div[@class="f-info"]/span[3]/text()')[0]
airline = flight.xpath('.//div[@class="f-air"]/a/text()')[0]
aircraft = flight.xpath('.//div[@class="f-air"]/span/text()')[0]
price = flight.xpath('.//div[@class="f-price"]/em/text()')[0]
# 在这里将解析结果存储到数据库或文件中
print(f"{flight_no} {dep_time} - {arr_time} {dep_airport} - {arr_airport} {airline} {aircraft} {duration} {price}")
print(f"Crawled {url}")
# 创建线程并启动
threads = []
for i in range(thread_count):
thread = Thread(target=crawl, args=(queue,))
thread.start()
threads.append(thread)
# 等待所有线程结束
for thread in threads:
thread.join()
```
上述代码中,我们首先定义了要爬取的机场代码,然后创建了一个队列来存储要爬取的网址。在执行函数 `crawl` 中,我们通过 `queue.get()` 方法从队列中获取一个网址进行爬取,并解析每个航班的详细信息。在解析完成后,我们可以将解析结果存储到数据库或文件中。最后,我们创建了多个线程并启动它们,等待所有线程结束后程序退出。
希望这个示例对您有所帮助!
阅读全文