Python爬蟲實戰(zhàn)之用selenium爬取某旅游網(wǎng)站_第1頁
Python爬蟲實戰(zhàn)之用selenium爬取某旅游網(wǎng)站_第2頁
Python爬蟲實戰(zhàn)之用selenium爬取某旅游網(wǎng)站_第3頁
Python爬蟲實戰(zhàn)之用selenium爬取某旅游網(wǎng)站_第4頁
Python爬蟲實戰(zhàn)之用selenium爬取某旅游網(wǎng)站_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第Python爬蟲實戰(zhàn)之用selenium爬取某旅游網(wǎng)站目錄一、selenium實戰(zhàn)二、打開藝龍網(wǎng)三、精確目標四、成功結語

一、selenium實戰(zhàn)

這里我們只會用到很少的selenium語法,我這里就不補充別的用法了,以實戰(zhàn)為目的

二、打開藝龍網(wǎng)

可以直接點擊這里進入:藝龍網(wǎng)

這里是主頁

三、精確目標

我們的目標是,鶴壁市,所以我們應該先點擊搜索框,然后把北京刪掉,替換成鶴壁市,那么怎么通過selenium實現(xiàn)呢?

打開pycharm,新建一個叫做藝龍網(wǎng)的py文件,先導包:

fromseleniumimportwebdriver

importtime#導包

driver=webdriver.Chrome()#創(chuàng)建一個selenium的對象

driver.get("/")

time.sleep(1)#打開網(wǎng)站,并讓它睡1s,避免渲染未完成就進行下一步操作

driver.maximize_window()#將瀏覽器最大化

怎么找到搜索框呢,有很多方法,xpath,css,JavaScript,jQuery,,,因為xpath簡單,所以我們只使用xpath,因為這個網(wǎng)站也是可以用xpath的,具體步驟是:

1.F12,小箭頭,點擊搜索框

2.點擊后,找到元素中的位置,右鍵,復制,復制xpath

3.進入pycharm中,在之前創(chuàng)建的py文件中添加如下代碼

driver.find_element_by_xpath('//*[@id="domesticDiv"]/dl[1]/dd/input').clear()

#將搜索框中的內容清理

4.在搜索框添加“鶴壁市”

driver.find_element_by_xpath('//*[@id="domesticDiv"]/dl[1]/dd/input').send_keys('鶴壁市')

5.點擊搜索,進入下一頁

time.sleep(1)

driver.find_element_by_xpath('//*[@id="hotel_sub_tabs"]/span[1]/b').click()#點擊無關

time.sleep(1)#避免渲染不及時導致報錯

driver.find_element_by_xpath('//*[@id="domesticDiv"]/div/span[1]').click()#點擊搜索

6.下一頁

此時我們絕望的發(fā)現(xiàn),這些操作都是沒用的(對這個網(wǎng)站沒用,但是至少我們學到了點知識?)她還是北京

所以我們只能這樣做了

直接點擊搜索,進入這個頁面后再輸入鶴壁(那干嘛不直接訪問這個網(wǎng)頁呢?為了我這該死的儀式感?。。┻@樣做,再那樣做,就行了

fromseleniumimportwebdriver

importtime#導包

driver=webdriver.Chrome()#創(chuàng)建一個selenium的對象

driver.get("/")

time.sleep(1)#打開網(wǎng)站,并讓它睡1s,避免渲染未完成就進行下一步操作

driver.maximize_window()#將瀏覽器最大化

driver.find_element_by_xpath('//*[@id="domesticDiv"]/div/span[1]').click()#點擊搜索

driver.find_element_by_xpath('//*[@id="m_searchBox"]/div[1]/label/input').clear()#清空搜索框內容

driver.find_element_by_xpath('//*[@id="m_searchBox"]/div[1]/label/input').send_keys('鶴壁市')#在搜索框輸入鶴壁市

time.sleep(1)

driver.find_element_by_xpath('//*[@id="sugContent"]/ul/li[1]/div/div[1]/div[1]/span/b').click()#鶴壁市

time.sleep(1)

#只是改變了順序,并更換了xpath語法

然后就成功的定位到了鶴壁市

8.分析網(wǎng)頁,找到詳情頁的url

我們可以這樣做

我們發(fā)現(xiàn),這個詳情頁每個的xpath都不相同,怎么做到把所有詳情頁都“照顧”得到呢?看來只能請出我們的requests來了,然后我們發(fā)現(xiàn),這個只是一段URL,那怎么辦?拼接咯!

9.通過查看響應,我們知道響應和元素是一樣的,那么說明什么?我們可以通過xpath提取到我們的元素,直接請出我們的xpath選手。

fromlxmlimportetree

importre

html_data=driver.page_source#將數(shù)據(jù)存入html_data

ht=ht_ht.xpath('//div[@]/a/@data-link')#提取到url的后半段

10.拼接字符串形成新URL

點進去一個詳情頁查看URL,發(fā)現(xiàn)是這樣的

研究發(fā)現(xiàn),將issugtrace=2刪去也可以運行,而我們通過xpath取到的正是后面的/31712004/,所以:

forurinht:

new_ul=''+ur

11.取到詳情頁URL后,就要點進去,然后再分析網(wǎng)頁,再提取數(shù)據(jù),然后存數(shù)據(jù),找xpath的我就先不說了,也不難。

head={

'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/89.0.4389.114Safari/537.36'

forurinht:

new_ul=''+ur

xiangqing_ht=requests.get(new_ul,headers=head).content.decode()

#使用requests

time.sleep(1)#睡1s

ht_data=etree.HTML(xiangqing_ht)#轉為可使用xpath的HTML格式

tingche=ht_data.xpath('//*[@id="hotelContent"]/div/dl[4]/dd/text()')#停車位

iftingche==[]:

tingche='無停車位'

name=ht_data.xpath('/html/body/div[3]/div/div[1]/div[1]/div/h1/text()')[0]#酒店名字

phine_num=ht_data.xpath('//*[@id="hotelContent"]/div/dl[1]/dd/span/text()')#電話

photo_li=ht_data.xpath('/html/body/div[3]/div/div[2]/div[1]/div[2]/ul[1]/li/img/@src')#照片

weizhi=ht_data.xpath('//*[@id="map"]/div[1]/div[2]/div[1]/div/div[9]/div[2]/div/p[2]/text()')#位置

miaoshu=ht_data.xpath('//*[@id="hotelContent"]/div/dl[1]/dd/ul/li[2]/div/p/span[1]/text()')

然后我們就拿到了數(shù)據(jù),接下來,這些數(shù)據(jù)怎么保存呢?可以使用字典保存到json中。我就接著上面的寫了

dic={}#使用字典進行json存儲

ic[f"{name}"]={}

dic[f"{name}"][f"{name}停車場"]=tingche

dic[f"{name}"][f"{name}電話"]=phine_num

dic[f"{name}"][f"{name}位置"]=weizhi

dic[f"{name}"][f"{name}描述"]=miaoshu

path=f"酒店數(shù)據(jù)//{name}"

ifnotos.path.exists(path):

os.mkdir(path)

#創(chuàng)建酒店文件夾

fornum,photoinzip(range(len(photo_li)),photo_li):

ifnum4:

break

else:

withopen(f'酒店數(shù)據(jù)//{name}//{name,num+1}.jpg','wb')asf:

f.write(requests.get(photo).content)#將照片存進本地

withopen(f"酒店數(shù)據(jù)//{name}//酒店數(shù)據(jù).json",'w')asf:

f.write(str(dic))#將json存入文件

dic={}#將字典內的數(shù)據(jù)清楚,留待下一次循環(huán)使用

12.數(shù)據(jù)拿到之后,還沒完,我們還要爬下一頁,首先需要把主頁滑倒最底部

foriinrange(4):#01

time.sleep(0.5)

j=(i+1)*1000#10002000

js_=f'document.documentElement.scrollTop={j}'

driver.execute_script(js_)

time.sleep(5)

13.回到主頁面,找到下一頁的xpath,點擊

driver.find_element_by_xpath('//*[@

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論