本文將從多個方面闡述如何使用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')
原創文章,作者:CHPEK,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/373523.html