日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 携程_python 携程爬虫开发笔记

發布時間:2025/3/15 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 携程_python 携程爬虫开发笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

最近購買了《Python3 爬蟲、數據清洗與可視化實戰》,剛好適逢暑假,就嘗試從攜程頁面對廣州的周邊游產品進行爬蟲數據捕捉。

因為才學Python不夠一個星期,python的命名規范還是不太了解,只能套用之前iOS開發的命名規范,有不足之處請多多指點

一、前期

1.主要用到的庫

from bs4 import BeautifulSoup

import time

import re #正則表達式

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.support.wait import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.common.action_chains import ActionChains #瀏覽器操作

import xlrd

import xlwt

from xlutils.copy import copy

import os

BeautifulSoup:用于對標簽等數據進行定位和抓取

selenium:用于啟動瀏覽器和對頁面進行自動操作

time:暫停等待操作

xlrd、xlwt、xlutils:對數據結果進行Excel讀寫保存操作

2.核心思路

1,跳進出發點的周邊游頁面(廣州)

2,在首頁捕捉推薦的熱門目的地和熱點景點,進行保存

3,針對目的地地點進行遍歷搜索所展示的旅游產品

4,產品數據參數抓取

5,數據保存

6,退出瀏覽器

二、代碼

1.啟動瀏覽器

def setupDriverSetting():

global driver

# url = 'http://m.ctrip.com/restapi/soa2/10290/createclientid?systemcode=09&createtype=3&conte'#獲取cookieID

# 手機端

# url = 'https://m.ctrip.com/webapp/vacations/tour/list?tab=64&kwd=%E7%8F%A0%E6%B5%B7&salecity=32&searchtype=tour&sctiy=32'

# 電腦端

url = 'https://weekend.ctrip.com/around/'

# 設置用chrome啟動

driver = webdriver.Chrome()

# #設置fireFox請求頭參數

# profile = webdriver.FirefoxProfile()

# user_agent = "Mozilla/5.0 (X11; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0"

# profile.set_preference("general.useragent.override",user_agent)

#

# driver = webdriver.Firefox(profile)

driver.get(url)

用webdriver啟動Chrome或者fireFox,并跳進首頁URL

2.選擇出發點城市

def select_StartPlace(startPlace):

#點擊出發點view

driver.find_element_by_xpath("//*[@id='CitySelect']").click()

#選擇出發點

cityList = driver.find_elements_by_xpath("//*[@id='CitySelect']/dd/ul")

for link in cityList:

links = link.find_elements(By.TAG_NAME,"a")

for eachCity in links:

cityStr = eachCity.text

if cityStr == startPlace:

print("找到目標城市:"+eachCity.get_attribute('href'))

driver.get(eachCity.get_attribute('href'))

time.sleep(2)

try:

WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, "//*[@id='SearchText']")))

except:

print('出發地頁面加載不成功')

break

主要是用find_element_by_xpath尋找目標城市進行選擇篩選,然后跳到城市專頁

3.搜索目的地

def finAllDestinationPage():

#查找總數組

destType = driver.find_element_by_id("J_sub_circum")#id 決定產品范圍(周邊游,境外游)

print(destType.text)

destType1 = destType.find_element_by_class_name("side_jmp_dest")

destTypeItem = destType1.get_attribute('innerHTML')

item = BeautifulSoup(destTypeItem,'lxml')

destTypeList = item.find_all('li')

allDestinationListDic = {}

for each in destTypeList:

typeName = each.h4.string

typeList = each.find_all('a')

list = []

for i in typeList:

list.append(i.string)

allDestinationListDic[typeName] = list

return allDestinationListDic

搜索所有可推薦目的地和景點,并用字典保存

4.旅游產品列表頁

def jump_destinationPage(startPlace,destination):

#定位搜索欄

try:

WebDriverWait(driver,5).until(EC.presence_of_element_located((By.XPATH,"//*[@id='SearchText']")))

except:

print('查找不到搜索欄')

finally:

print('本地頁面加載完畢')

driver.find_element_by_xpath("//input[@id='SearchText']").send_keys(destination)

print("輸入目的地:"+destination)

driver.find_element_by_xpath("//*[@id='SearchBtn']").click()

print("點擊搜索按鈕結束")

time.sleep(2)

try:

WebDriverWait(driver,5).until(EC.presence_of_element_located((By.XPATH,"//*[@id='js-dpSearcher']")))

except:

print('產品列表頁加載不成功')

finally:

print('產品列表頁加載完畢')

#再選一次出發地,以防出錯

reSelect_StartPlace(startPlace)

#搜索頁數

pageHtml = driver.find_element_by_xpath("//*[@id='_sort']/div/span")

print(pageHtml.text)

pageNumStr = pageHtml.text

pageNumStr = pageNumStr[:-1]

print("獲取的num:" + pageNumStr)

#正則表達式 查找頁數

pageNumS = re.findall(r'\d+',pageNumStr)

pageNum = int(pageNumS[1])

print(pageNum)

tourProductList = []

for i in range(0,pageNum):

itemList = showCurrentPageAllData()

#收集數據

for j in range(0,len(itemList)):

eachItem = collectCurrentPageEachData(j)

tourProductList.append(eachItem)

#點擊下一頁

driver.find_element_by_xpath("//input[@id='ipt_page_txt']").clear()

driver.find_element_by_xpath("//input[@id='ipt_page_txt']").send_keys(str(i+2))

driver.find_element_by_xpath("//*[@id='ipt_page_btn']").click()

print("點擊下一頁結束->"+str(i+2)+"頁")

time.sleep(2)

return driver

跳進產品頁,并根據標簽,抓取總頁數,在遍歷所有旅游產品后,再跳到下一頁進行循環遍歷

5.產品數據抓取

def collectCurrentPageEachData(itemNum):

itemList = driver.find_elements_by_class_name("product_box")

str = itemList[itemNum].get_attribute('innerHTML')#轉換成字符串

# item = BeautifulSoup(str,"html.parser")#獲取item的soup對象

item = BeautifulSoup(str, "lxml") # 獲取item的soup對象

# print("+++++++"+item.prettify())

# 解析

#產品名稱

titleNameHtml = item.find('h2',class_= 'product_title')

print("-------"+titleNameHtml.get_text())

productName = titleNameHtml.get_text()

#產品鏈接

productLink = titleNameHtml.a['href']

productLink = productLink[2:]

productLink = "https://"+productLink

print("link:" + productLink)

#產品類型

productType = item.find('em')

print("type:"+productType.get_text())

productTypeStr = productType.get_text()

#產品價格

priceHtml = item.find('span',class_='sr_price')

priceStr = priceHtml.strong.get_text()

#判斷是否為數字

if priceStr.isdigit() == True :

priceStr = "%.2f"%float(priceStr)

print("price:"+priceStr)

#產品供應商

productRetail = item.find('p',class_='product_retail')

productRetailStr = productRetail['title']

if "供應商" in productRetailStr:

productRetailStr = productRetailStr[4:]

print("retail:" + productRetailStr)

#產品評分

try :

gradeHtml = item.find('p', class_='grade')

gradeStr = gradeHtml.strong.get_text()

print("grade:" + gradeStr)

except:

print('查找不到評分')

gradeStr = ''

# 產品人數

try:

commentHtml = item.find('div', class_='comment')

commentStr = commentHtml.em.get_text()

commentNumS = re.findall(r'\d+', commentStr)

commentNum = int(commentNumS[0])

print("comment:",commentNum)

except:

print('查找不到出游人數')

commentNum = ''

return {

'名稱':productName,

'鏈接':productLink,

'類型':productTypeStr,

'價格':priceStr,

'供應商':productRetailStr,

'評分':gradeStr,

'人數':commentNum,

}

在產品頁面上獲取所有可見信息,并返回

6.數據保存

class ExcelFileManager:

def creatExcelFile(fileName,sheetName,headRowList):

# 獲取項目所在目錄

filePath = os.getcwd() + '/' + fileName + '.xls'

#如果不存在就新增

try:

oldFile = xlrd.open_workbook(filePath)

file = copy(oldFile)

except:

file = xlwt.Workbook()

print("新建文件")

#如果不存在就新增

try:

sheet1 = file.add_sheet(sheetName,cell_overwrite_ok=True)

except:

sheet1 = file.get_sheet(sheetName)

#設置style樣式

head_style = xlwt.easyxf('font: name Times New Roman, color-index red, bold on',num_format_str='#,##0.00')

row0 = headRowList

for i in range(0,len(row0)):

sheet1.write(0,i,row0[i],head_style)

print(filePath)

file.save(filePath)

def addDataToExcelFile(fileName,sheetName,dataList):

filePath = os.getcwd()+'/'+fileName+'.xls'

file = xlrd.open_workbook(filePath)

#已存在的行數

newRows = file.sheet_by_name(sheetName).nrows

new_File = copy(file)

sheet = new_File.get_sheet(sheetName)

try:

for i in range(0,len(dataList)):

for j in range(0,len(dataList[i])):

sheet.write(i+newRows,j,dataList[i][j])

except Exception as e:

print(e)

new_File.save(filePath)

Excel文件創建與保存數據,不得不說,python對Excel支持不是很友好,xlrd和xlwt僅支持讀和寫,不支持增加sheet或者在原有Excel文件上添加數據等操作,需要用到第三方庫

三、抓取結果:

1530848043475.jpg

總結

以上是生活随笔為你收集整理的python 携程_python 携程爬虫开发笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 婷婷激情图片 | 亚洲视频网址 | 素人一区二区三区 | 999久久精品| 中日毛片 | 婷婷影视| 丝袜老师扒开让我了一夜漫画 | 九九综合网 | 欧美精品1区2区 | 国产真实交换夫妇视频 | 90岁肥老奶奶毛毛外套 | 四虎成人在线视频 | 成人在线观看免费网站 | 新超碰97 | 国产美女性生活 | 美女色呦呦 | 疯狂做爰高潮videossex | 日韩一区二区不卡 | 亚洲人交配| 国产无遮挡一区二区三区毛片日本 | 91精品国产综合久久精品图片 | 外国电影免费观看高清完整版 | 国产激情视频一区 | 欧美aaaaaaaaa | 捆绑束缚调教 | 亚洲av无码国产精品麻豆天美 | 哪里有毛片看 | 在线视频这里只有精品 | 国内精品久久99人妻无码 | 成人免费午夜视频 | 亚洲一区二区三区四区五区六区 | 美女一级黄 | 东京热毛片 | 日本成人午夜 | 中文字幕一区二区精品 | 日韩电影二区 | www色综合 | 大黄毛片| 免费黄色在线视频 | 欧美一级黑人 | 国产黄a三级三级看三级 | 91视频看片 | 51免费看成人啪啪片 | www网站在线免费观看 | 国产青青草视频 | 日韩网站在线播放 | 日韩成人av免费在线观看 | 大胸喷奶水www视频妖精网站 | 狠狠干香蕉| 日韩一区二区三区在线播放 | 人人综合网 | 亚洲成人激情在线 | 西西4444www大胆无码 | 欧美激情图| 东北毛片 | www.youjizz.com国产 | 绯色av一区二区三区高清 | 国产精品国产精品国产专区不片 | 尤物视频在线观看免费 | 91在线观看视频 | 久久中文字幕人妻熟av女蜜柚m | 亚洲一区二区免费看 | 伊人资源 | 久久毛片网 | 国产又黄又猛 | 欧美绿帽交换xxx | 成人免费影院 | 沈樵精品国产成av片 | 精品熟女一区二区三区 | 国产女人高潮的av毛片 | 秘密基地动漫在线观看免费 | 丰满饥渴老女人hd | 国产黑丝在线播放 | 欧美七区 | 色婷亚洲| 日本国产精品 | 成人午夜av在线 | se在线观看| 亚洲制服在线观看 | 日韩免费视频一区二区 | 美女一区二区三区视频 | 黄网av | www.com欧美 | 日本亚洲一区 | 免费欧美视频 | 污视频在线免费观看 | 亚洲激情视频 | 亚洲久久在线 | 国产免费观看久久黄av片 | 一级片高清 | 中文字幕一区二区三区四区 | 北条麻妃一区二区三区四区五区 | 国产九九九精品 | 99久久综合 | 在线国产播放 | 久草中文视频 | 粉嫩久久99精品久久久久久夜 | 法国空姐在线观看视频 | 在线观看av不卡 |