首页 > 编程知识 正文

如何使用Python编写携程爬虫?

时间:2023-11-21 10:04:49 阅读:291036 作者:MKKF

本文将从多个方面阐述如何使用Python编写携程爬虫,包括安装所需要的Python库、编写爬虫代码、解析网页内容、持久化存储爬取结果等。

一、安装需要的Python库

在编写携程爬虫之前,我们需要安装一些必要的Python库。

首先,我们需要安装 requests 库,它是一个Python第三方库,用于发送 HTTP 请求。

pip install requests

其次,我们需要安装 BeautifulSoup 库,这是一个用于解析HTML和XML文档的Python库。

pip install beautifulsoup4

二、编写爬虫代码

接下来,我们可以编写携程爬虫的代码了。

首先,我们需要导入 requests 库和 BeautifulSoup 库:

import requests
from bs4 import BeautifulSoup

然后,我们需要指定要请求的网页URL地址,并发送 HTTP 请求获取网页内容:

url = 'https://hotels.ctrip.com/hotel/shanghai2#ctm_ref=hod_hp_sb_lst'
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'}
r = requests.get(url, headers=headers)
html = r.content

接下来,我们可以使用 BeautifulSoup 库解析获取到的网页内容:

soup = BeautifulSoup(html, 'html.parser')

在解析网页内容之后,我们可以使用 BeautifulSoup 库提供的各种方法来获取需要的信息。

三、解析网页内容

在使用 BeautifulSoup 库解析网页内容时,我们可以使用它提供的一些方法来定位需要的信息。

例如,我们可以使用 find_all() 方法获取网页中所有的酒店信息:

hotels = soup.find_all('div', class_='hotel_new_list')  # 获取所有的酒店信息

然后,我们可以遍历 hotels 列表来获取每个酒店的详细信息,例如酒店名称、评分、价格等。

for hotel in hotels:
    hotel_name = hotel.find('h2', class_='hotel_name').a.text  # 获取酒店名称
    hotel_score = hotel.find('span', {'itemprop': 'ratingValue'}).text  # 获取酒店评分
    hotel_price = hotel.find('span', class_='J_price_lowList').em.text  # 获取酒店价格
    print(f'{hotel_name} 的评分为 {hotel_score},价格为 {hotel_price} 元。')

四、持久化存储爬取结果

最后,我们可以将爬取到的结果进行持久化存储,以便后续使用。

我们可以将爬取到的结果存储到文本文件中:

with open('hotels.txt', 'w', encoding='utf-8') as f:
    for hotel in hotels:
        hotel_name = hotel.find('h2', class_='hotel_name').a.text  # 获取酒店名称
        hotel_score = hotel.find('span', {'itemprop': 'ratingValue'}).text  # 获取酒店评分
        hotel_price = hotel.find('span', class_='J_price_lowList').em.text  # 获取酒店价格
        f.write(f'{hotel_name} 的评分为 {hotel_score},价格为 {hotel_price} 元。n')

我们还可以将爬取到的结果存储到数据库中,以备后续分析。

完整的携程爬虫代码如下:

import requests
from bs4 import BeautifulSoup

url = 'https://hotels.ctrip.com/hotel/shanghai2#ctm_ref=hod_hp_sb_lst'
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'}
r = requests.get(url, headers=headers)
html = r.content

soup = BeautifulSoup(html, 'html.parser')

hotels = soup.find_all('div', class_='hotel_new_list')
for hotel in hotels:
    hotel_name = hotel.find('h2', class_='hotel_name').a.text  # 获取酒店名称
    hotel_score = hotel.find('span', {'itemprop': 'ratingValue'}).text  # 获取酒店评分
    hotel_price = hotel.find('span', class_='J_price_lowList').em.text  # 获取酒店价格
    print(f'{hotel_name} 的评分为 {hotel_score},价格为 {hotel_price} 元。')
    
    # 存储到文本文件中
    with open('hotels.txt', 'w', encoding='utf-8') as f:
        f.write(f'{hotel_name} 的评分为 {hotel_score},价格为 {hotel_price} 元。n')

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。