av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

Python爬蟲實(shí)戰(zhàn)之用selenium爬取某旅游網(wǎng)站

瀏覽:6日期:2022-06-17 13:34:12
目錄一、selenium實(shí)戰(zhàn)二、打開藝龍網(wǎng)三、精確目標(biāo)四、成功結(jié)語一、selenium實(shí)戰(zhàn)

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

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

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

這里是主頁

Python爬蟲實(shí)戰(zhàn)之用selenium爬取某旅游網(wǎng)站

三、精確目標(biāo)

我們的目標(biāo)是,鶴壁市,所以我們應(yīng)該先點(diǎn)擊搜索框,然后把北京刪掉,替換成鶴壁市,那么怎么通過selenium實(shí)現(xiàn)呢?打開pycharm,新建一個(gè)叫做藝龍網(wǎng)的py文件,先導(dǎo)包:

from selenium import webdriver import time # 導(dǎo)包driver = webdriver.Chrome() # 創(chuàng)建一個(gè)selenium的對(duì)象driver.get('http://www.elong.com/') time.sleep(1) # 打開網(wǎng)站,并讓它睡1s,避免渲染未完成就進(jìn)行下一步操作driver.maximize_window() # 將瀏覽器最大化

怎么找到搜索框呢,有很多方法,xpath,css,JavaScript,jQuery,,,因?yàn)閤path簡(jiǎn)單,所以我們只使用xpath,因?yàn)檫@個(gè)網(wǎng)站也是可以用xpath的,具體步驟是:

1.F12,小箭頭,點(diǎn)擊搜索框

Python爬蟲實(shí)戰(zhàn)之用selenium爬取某旅游網(wǎng)站

2.點(diǎn)擊后,找到元素中的位置,右鍵,復(fù)制,復(fù)制xpath

Python爬蟲實(shí)戰(zhàn)之用selenium爬取某旅游網(wǎng)站

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

driver.find_element_by_xpath(’//*[@id='domesticDiv']/dl[1]/dd/input’).clear()# 將搜索框中的內(nèi)容清理

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

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

5.點(diǎn)擊搜索,進(jìn)入下一頁

time.sleep(1)driver.find_element_by_xpath(’//*[@id='hotel_sub_tabs']/span[1]/b’).click() # 點(diǎn)擊無關(guān)time.sleep(1) # 避免渲染不及時(shí)導(dǎo)致報(bào)錯(cuò)driver.find_element_by_xpath(’//*[@id='domesticDiv']/div/span[1]’).click() # 點(diǎn)擊搜索

6.下一頁此時(shí)我們絕望的發(fā)現(xiàn),這些操作都是沒用的(對(duì)這個(gè)網(wǎng)站沒用,但是至少我們學(xué)到了點(diǎn)知識(shí)?)她還是北京

Python爬蟲實(shí)戰(zhàn)之用selenium爬取某旅游網(wǎng)站

所以我們只能這樣做了直接點(diǎn)擊搜索,進(jìn)入這個(gè)頁面后再輸入鶴壁(那干嘛不直接訪問這個(gè)網(wǎng)頁呢?為了我這該死的儀式感!!)這樣做,再那樣做,就行了

from selenium import webdriverimport time # 導(dǎo)包driver = webdriver.Chrome() # 創(chuàng)建一個(gè)selenium的對(duì)象driver.get('http://www.elong.com/')time.sleep(1) # 打開網(wǎng)站,并讓它睡1s,避免渲染未完成就進(jìn)行下一步操作driver.maximize_window() # 將瀏覽器最大化driver.find_element_by_xpath(’//*[@id='domesticDiv']/div/span[1]’).click() # 點(diǎn)擊搜索driver.find_element_by_xpath(’//*[@id='m_searchBox']/div[1]/label/input’).clear() # 清空搜索框內(nèi)容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語法

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

Python爬蟲實(shí)戰(zhàn)之用selenium爬取某旅游網(wǎng)站

8.分析網(wǎng)頁,找到詳情頁的url我們可以這樣做

Python爬蟲實(shí)戰(zhàn)之用selenium爬取某旅游網(wǎng)站

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

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

from lxml import etreeimport rehtml_data = driver.page_source # 將數(shù)據(jù)存入html_dataht = ht_ht.xpath(’//div[@class='to_detail']/a/@data-link’) # 提取到url的后半段

10.拼接字符串形成新URL

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

Python爬蟲實(shí)戰(zhàn)之用selenium爬取某旅游網(wǎng)站

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

for ur in ht: new_ul = ’http://www.elong.com’ + ur

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

head = { ’User-Agent’: ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36’}for ur in ht: new_ul = ’http://www.elong.com’ + ur xiangqing_ht = requests.get(new_ul, headers=head).content.decode() # 使用requeststime.sleep(1) # 睡1s ht_data = etree.HTML(xiangqing_ht) # 轉(zhuǎn)為可使用xpath的HTML格式 tingche = ht_data.xpath(’//*[@id='hotelContent']/div/dl[4]/dd/text()’) # 停車位 if tingche == []: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ù)怎么保存呢?可以使用字典保存到j(luò)son中。我就接著上面的寫了

dic = {} # 使用字典進(jìn)行json存儲(chǔ)ic[f'{name}'] = {}dic[f'{name}'][f'{name}停車場(chǎng)'] = tingchedic[f'{name}'][f'{name}電話'] = phine_numdic[f'{name}'][f'{name}位置'] = weizhidic[f'{name}'][f'{name}描述'] = miaoshupath = f'酒店數(shù)據(jù)//{name}'if not os.path.exists(path): os.mkdir(path)# 創(chuàng)建酒店文件夾for num, photo in zip(range(len(photo_li)), photo_li): if num > 4:break else:with open(f’酒店數(shù)據(jù)//{name}//{name, num + 1}.jpg’, ’wb’) as f: f.write(requests.get(photo).content) # 將照片存進(jìn)本地with open(f'酒店數(shù)據(jù)//{name}//酒店數(shù)據(jù).json', ’w’) as f: f.write(str(dic)) # 將json存入文件dic = {} # 將字典內(nèi)的數(shù)據(jù)清楚,留待下一次循環(huán)使用

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

for i in range(4): # 0 1 time.sleep(0.5) j = (i + 1) * 1000 # 1000 2000 js_ = f’document.documentElement.scrollTop={j}’ driver.execute_script(js_) time.sleep(5)

13.回到主頁面,找到下一頁的xpath,點(diǎn)擊

driver.find_element_by_xpath(’//*[@id='pageContainer']/a[9]’).click()

然后,我們就進(jìn)入了 下一頁,然后下面就沒有代碼了,怎么辦,怎么讓代碼一直運(yùn)行將很多頁的數(shù)據(jù)爬下來呢?有兩種方法:

封裝函數(shù),并發(fā)爬取使用循環(huán)進(jìn)行爬取

然后,就沒有然后了…

四、成功

成功拿到數(shù)據(jù)

Python爬蟲實(shí)戰(zhàn)之用selenium爬取某旅游網(wǎng)站

結(jié)語

希望大家能夠通過實(shí)戰(zhàn)了解各種語法的功能,而不是死記硬背各種語法,那樣你很容易忘記,其實(shí)很多學(xué)習(xí)都可以通過這種方式來學(xué)習(xí)

到此這篇關(guān)于Python爬蟲實(shí)戰(zhàn)之用selenium爬取某旅游網(wǎng)站的文章就介紹到這了,更多相關(guān)Python selenium爬取網(wǎng)站內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 国产精品嫩草影院精东 | www.97国产| www.黄色片视频 | 国产91成人| 午夜精品久久久久99蜜 | 国产成人精品免费视频 | 国产高清一区二区 | 欧洲性生活视频 | 欧美久久影院 | 久久久精品一区二区 | 欧美激情在线精品一区二区三区 | 狠狠操狠狠干 | 欧美vide | 亚洲久草 | 欧美一区二区免费 | 精品久久香蕉国产线看观看亚洲 | 国产成人自拍av | 黄色在线免费观看 | 欧美va大片| 成人av一区二区三区 | 日本男人天堂 | 夜夜av | 羞羞网站在线免费观看 | 一区二区亚洲 | 黄网站涩免费蜜桃网站 | 精品一区二区三区电影 | 欧美在线视频一区二区 | 久久小视频 | 久视频在线观看 | 精品久久影院 | 国产精品九九九 | 国产免费一区二区三区 | 日韩不卡一区二区 | 99精品视频在线 | 北条麻妃99精品青青久久主播 | 黄色一级毛片 | 亚洲成人自拍网 | 日韩欧美在线免费观看 | 美女视频网站久久 | 久久69精品久久久久久国产越南 | 精品国产免费一区二区三区演员表 |