最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年06月06日 10:49:29   作者:布小禪  
上一篇我們已經(jīng)知道怎么簡單使用selenium了,那么我們就從這篇博客來動手爬取網(wǎng)站吧,文中有非常詳細的代碼示例,需要的朋友可以參考下

一、selenium實戰(zhàn)

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

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

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

這里是主頁

在這里插入圖片描述

三、精確目標

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

from selenium import webdriver 
import time   # 導包
driver = webdriver.Chrome()  # 創(chuàng)建一個selenium的對象
driver.get("http://www.elong.com/")  
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()
# 將搜索框中的內(nèi)容清理

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()  # 點擊無關(guān)
time.sleep(1) # 避免渲染不及時導致報錯
driver.find_element_by_xpath('//*[@id="domesticDiv"]/div/span[1]').click()  # 點擊搜索

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

在這里插入圖片描述 

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

from selenium import webdriver
import time   # 導包
driver = webdriver.Chrome()  # 創(chuàng)建一個selenium的對象
driver.get("http://www.elong.com/")
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()  # 清空搜索框內(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語法

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

在這里插入圖片描述

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

在這里插入圖片描述

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

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

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

10.拼接字符串形成新URL

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

在這里插入圖片描述

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

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

11.取到詳情頁URL后,就要點進去,然后再分析網(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()  			
    # 使用requests
	time.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 = {} # 使用字典進行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}"
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)  # 將照片存進本地
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,點擊

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

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

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

然后,就沒有然后了…

四、成功

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

在這里插入圖片描述

結(jié)語

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

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

相關(guān)文章

  • PyQt5執(zhí)行耗時操作導致界面卡死或未響應(yīng)的原因及解決辦法

    PyQt5執(zhí)行耗時操作導致界面卡死或未響應(yīng)的原因及解決辦法

    這篇文章主要給大家介紹了關(guān)于PyQt5執(zhí)行耗時操作導致界面卡死或未響應(yīng)的原因及解決辦法,由于耗時的操作會獨占系統(tǒng)cpu資源,讓界面卡死在那里,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • python實現(xiàn)連連看游戲

    python實現(xiàn)連連看游戲

    這篇文章主要為大家詳細介紹了python實現(xiàn)連連看游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Python使用Pandas庫將Excel數(shù)據(jù)疊加生成新DataFrame的操作指南

    Python使用Pandas庫將Excel數(shù)據(jù)疊加生成新DataFrame的操作指南

    在日常數(shù)據(jù)處理工作中,我們經(jīng)常需要將不同Excel文檔中的數(shù)據(jù)整合到一個新的DataFrame中,以便進行進一步的分析和處理,本文將介紹如何使用Python中的Pandas庫,將多個Excel文檔中的數(shù)據(jù)疊加形成新的DataFrame,并提供詳細的操作指南和案例,幫助讀者輕松掌握這一技能
    2025-01-01
  • 解決Python paramiko 模塊遠程執(zhí)行ssh 命令 nohup 不生效的問題

    解決Python paramiko 模塊遠程執(zhí)行ssh 命令 nohup 不生效的問題

    這篇文章主要介紹了解決Python paramiko 模塊遠程執(zhí)行ssh 命令 nohup 不生效的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Python實現(xiàn)分段讀取和保存遙感數(shù)據(jù)

    Python實現(xiàn)分段讀取和保存遙感數(shù)據(jù)

    當遇到批量讀取大量遙感數(shù)據(jù)進行運算的時候,如果不進行分段讀取操作的話,電腦內(nèi)存可能面臨著不夠使用的情況,所以我們要進行分段讀取數(shù)據(jù)然后進行運算,運算結(jié)束之后把這段數(shù)據(jù)保存成tif文件,本文介紹了Python實現(xiàn)分段讀取和保存遙感數(shù)據(jù),需要的朋友可以參考下
    2023-08-08
  • 如何使用Python發(fā)送HTML格式的郵件

    如何使用Python發(fā)送HTML格式的郵件

    這篇文章主要介紹了如何使用Python發(fā)送HTML格式的郵件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • pandas創(chuàng)建DataFrame的7種方法小結(jié)

    pandas創(chuàng)建DataFrame的7種方法小結(jié)

    這篇文章主要介紹了pandas創(chuàng)建DataFrame的7種方法小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • Python: tkinter窗口屏幕居中,設(shè)置窗口最大,最小尺寸實例

    Python: tkinter窗口屏幕居中,設(shè)置窗口最大,最小尺寸實例

    這篇文章主要介紹了Python: tkinter窗口屏幕居中,設(shè)置窗口最大,最小尺寸實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python進度條的使用

    Python進度條的使用

    在使用Python處理比較耗時操作的時候,為了便于觀察處理進度,就需要通過進度條將處理情況進行可視化展示,本文主要介紹了Python進度條的使用,分享給大家,感興趣的可以了解一下
    2021-05-05
  • Python實現(xiàn)批量自動整理文件

    Python實現(xiàn)批量自動整理文件

    本文將利用Python制作一個批量自動整理文件的小工具,可以自定義整理某一個路徑下面的所有需要被整理的文件。感興趣的小伙伴可以了解一下
    2022-03-03

最新評論

贺州市| 丹东市| 茌平县| 于田县| 建昌县| 通辽市| 南开区| 永吉县| 法库县| 博野县| 科技| 安乡县| 庆阳市| 乌拉特前旗| 邯郸县| 鄂托克旗| 扶余县| 互助| 含山县| 阜宁县| 隆化县| 广河县| 台北县| 游戏| 嘉禾县| 金阳县| 偃师市| 普安县| 大英县| 宁南县| 扶余县| 乐业县| 赞皇县| 年辖:市辖区| 周宁县| 镇坪县| 维西| 靖州| 武威市| 谢通门县| 乌拉特后旗|