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

python網(wǎng)絡(luò)爬蟲基于selenium爬取斗魚直播信息

 更新時間:2022年03月14日 16:38:12   作者:館主阿牛  
目前是直播行業(yè)的一個爆發(fā)期,由于國家對直播行業(yè)進(jìn)行整頓和規(guī)范,現(xiàn)在整個直播行業(yè)也在穩(wěn)固發(fā)展。隨著互聯(lián)網(wǎng)和網(wǎng)絡(luò)直播市場的快速發(fā)展,相信未來還有廣闊的發(fā)展前景。今天用selenium爬取一下斗魚直播信息將代碼分享給大家

一、本文使用的第三方包和工具

python 3.8  

谷歌瀏覽器

selenium(3.141.0)(pip install selenium == 3.141.0)注意4.0系列和3.0系列方法不同

瀏覽器驅(qū)動(和你的瀏覽器版本對應(yīng))

二、selenium的介紹和瀏覽器驅(qū)動的安裝

1.selenium的介紹

    selenium是一款web自動化測試工具,可以很方便地模擬真實(shí)用戶對瀏覽器進(jìn)行操作,它支持各種主流瀏覽器:IE、Chrome、Firefox、Safari、Opera等。你可以使用selenium做web測試或者爬蟲,自動搶票、自動下單也可以用selenium來做。

2.瀏覽器驅(qū)動的安裝

   網(wǎng)上方法很多,友友們自行搜索,在這里提一點(diǎn)注意事項(xiàng):本文用的是谷歌瀏覽器,瀏覽器驅(qū)動要對應(yīng)谷歌的哦,注意瀏覽器驅(qū)動與你的瀏覽器版本相對應(yīng),這里給出谷歌瀏覽器驅(qū)動的下載地址,友友們按照自己瀏覽器的版本對應(yīng)現(xiàn)在即可

http://chromedriver.storage.googleapis.com/index.html

下載完成后注意配置環(huán)境變量哦,不配置也行,不配置就要在代碼中寫上你的Chromedriver.exe文件的路徑或者不寫路徑將你的Chromedriver.exe和py文件放到同一目錄下也可以哦

三、代碼思路分析

進(jìn)入斗魚官網(wǎng),點(diǎn)到直播,下面的在線直播信息就是我們需要爬取的?

可以看到有標(biāo)題,類型,姓名,以及熱度,我們爬取這四個字段就行

然后滑到底部,這里的下一頁是我們控制爬取頁數(shù)的?

 注意:當(dāng)我們進(jìn)入頁面時,雖然有滾動條,但所有直播信息已經(jīng)加載好,并不是通過滑動然后Ajax加載的,所以在代碼中并不需要寫滑動,直接提取就可以拿到整個頁面的數(shù)據(jù)。

1.解析數(shù)據(jù)的函數(shù)

 #解析數(shù)據(jù)的函數(shù)
    def parse(self):
        #強(qiáng)制等待兩秒,等待頁面數(shù)據(jù)加載完畢
        sleep(2)
        li_list = self.bro.find_elements_by_xpath('//*[@id="listAll"]/section[2]/div[2]/ul/li')
        #print(len(li_list))
        data_list = []
        for li in li_list:
            dic_data = {}
            dic_data['title'] = li.find_element_by_xpath('./div/a/div[2]/div[1]/h3').text
            dic_data['name'] = li.find_element_by_xpath('./div/a/div[2]/div[2]/h2/div').text
            dic_data['art_type'] = li.find_element_by_xpath('./div/a/div[2]/div[1]/span').text
            dic_data['hot'] = li.find_element_by_xpath('./div/a/div[2]/div[2]/span').text
            data_list.append(dic_data)
        return data_list

2.保存數(shù)據(jù)的函數(shù)

 #解析數(shù)據(jù)的函數(shù)
    def parse(self):
        #強(qiáng)制等待兩秒,等待頁面數(shù)據(jù)加載完畢
        sleep(2)
        li_list = self.bro.find_elements_by_xpath('//*[@id="listAll"]/section[2]/div[2]/ul/li')
        #print(len(li_list))
        data_list = []
        for li in li_list:
            dic_data = {}
            dic_data['title'] = li.find_element_by_xpath('./div/a/div[2]/div[1]/h3').text
            dic_data['name'] = li.find_element_by_xpath('./div/a/div[2]/div[2]/h2/div').text
            dic_data['art_type'] = li.find_element_by_xpath('./div/a/div[2]/div[1]/span').text
            dic_data['hot'] = li.find_element_by_xpath('./div/a/div[2]/div[2]/span').text
            data_list.append(dic_data)
        return data_list

(1)保存為txt文本

#保存數(shù)據(jù)的函數(shù)
    def save_data(self,data_list,i):
        #在當(dāng)前目錄下將數(shù)據(jù)存為txt文件
        with open('./douyu.txt','w',encoding='utf-8') as fp:
            for data in data_list:
                data = str(data)
                fp.write(data+'\n')
            print("第%d頁保存完成!" % i)

(2)保存為json文件

#保存數(shù)據(jù)的函數(shù)
    def save_data(self,data_list,i):
        with open('./douyu.json','w',encoding='utf-8') as fp:
             #里面有中文,所以注意ensure_ascii=False
             data = json.dumps(data_list,ensure_ascii=False)
             fp.write(data)
             print("第%d頁保存完成!" % i)

3.主函數(shù)設(shè)計

#主函數(shù)
    def run(self):
        #輸入要爬取的頁數(shù),如果輸入負(fù)整數(shù),轉(zhuǎn)化成她的絕對值
        page_num = abs(int(input("請輸入你要爬取的頁數(shù):")))
        #初始化頁數(shù)為1
        i = 1
        #判斷輸入的數(shù)是否為整數(shù)
        if isinstance(page_num,int):
            #實(shí)例化瀏覽器對象
            self.bro = webdriver.Chrome(executable_path='../../可執(zhí)行文件/chromedriver.exe')
            # chromedriver.exe如果已添加到環(huán)境變量,可省略executable_path='../../可執(zhí)行文件/chromedriver.exe'
            self.bro.get(self.url)
            while i <= page_num:
                #調(diào)用解析函數(shù)
                data_list = self.parse()
                #調(diào)用保存函數(shù)
                self.save_data(data_list,i)
                try:
                    #定位包含“下一頁”字段的按鈕并點(diǎn)擊
                    button = self.bro.find_element_by_xpath('//span[contains(text(),"下一頁")]')
                    button.click()
                    i += 1
                except:
                    break
            self.bro.quit()
        else:
            print("輸入格式錯誤!")

四、完整代碼

from selenium import webdriver
from time import sleep
import json
#創(chuàng)建一個類
class Douyu():
    def __init__(self):
        self.url = 'https://www.douyu.com/directory/all'
    #解析數(shù)據(jù)的函數(shù)
    def parse(self):
        #強(qiáng)制等待兩秒,等待頁面數(shù)據(jù)加載完畢
        sleep(2)
        li_list = self.bro.find_elements_by_xpath('//*[@id="listAll"]/section[2]/div[2]/ul/li')
        #print(len(li_list))
        data_list = []
        for li in li_list:
            dic_data = {}
            dic_data['title'] = li.find_element_by_xpath('./div/a/div[2]/div[1]/h3').text
            dic_data['name'] = li.find_element_by_xpath('./div/a/div[2]/div[2]/h2/div').text
            dic_data['art_type'] = li.find_element_by_xpath('./div/a/div[2]/div[1]/span').text
            dic_data['hot'] = li.find_element_by_xpath('./div/a/div[2]/div[2]/span').text
            data_list.append(dic_data)
        return data_list
    #保存數(shù)據(jù)的函數(shù)
    def save_data(self,data_list,i):
        #在當(dāng)前目錄下將數(shù)據(jù)存為txt文件
        with open('./douyu.txt','w',encoding='utf-8') as fp:
            for data in data_list:
                data = str(data)
                fp.write(data+'\n')
            print("第%d頁保存完成!" % i)
        # json文件的存法
        # with open('./douyu.json','w',encoding='utf-8') as fp:
        # 里面有中文,所以注意ensure_ascii=False
        #     data = json.dumps(data_list,ensure_ascii=False)
        #     fp.write(data)
        #     print("第%d頁保存完成!" % i)
    #主函數(shù)
    def run(self):
        #輸入要爬取的頁數(shù),如果輸入負(fù)整數(shù),轉(zhuǎn)化成她的絕對值
        page_num = abs(int(input("請輸入你要爬取的頁數(shù):")))
        #初始化頁數(shù)為1
        i = 1
        #判斷輸入的數(shù)是否為整數(shù)
        if isinstance(page_num,int):
            #實(shí)例化瀏覽器對象
            self.bro = webdriver.Chrome(executable_path='../../可執(zhí)行文件/chromedriver.exe')
            # chromedriver.exe如果已添加到環(huán)境變量,可省略executable_path='../../可執(zhí)行文件/chromedriver.exe'
 
            self.bro.get(self.url)
            while i <= page_num:
                #調(diào)用解析函數(shù)
                data_list = self.parse()
                #調(diào)用保存函數(shù)
                self.save_data(data_list,i)
                try:
                    #定位包含“下一頁”字段的按鈕并點(diǎn)擊
                    button = self.bro.find_element_by_xpath('//span[contains(text(),"下一頁")]')
                    button.click()
                    i += 1
                except:
                    break
            self.bro.quit()
        else:
            print("輸入格式錯誤!")
if __name__ == '__main__':
    douyu = Douyu()
    douyu.run()

總結(jié)

   本文是為了練習(xí)selenium而寫的,由于一個頁面有120條數(shù)據(jù),所以采集效率較低,感興趣的小伙伴們可以試一試requests庫寫,爬取速度更快哦!希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用pandas忽略行列索引,縱向拼接多個dataframe

    使用pandas忽略行列索引,縱向拼接多個dataframe

    這篇文章主要介紹了使用pandas忽略行列索引,縱向拼接多個dataframe的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python編程中使用Pillow來處理圖像的基礎(chǔ)教程

    Python編程中使用Pillow來處理圖像的基礎(chǔ)教程

    這篇文章主要介紹了Python編程中使用Pillow來處理圖像的基礎(chǔ)教程,Pillow和PIL都是Python下十分強(qiáng)大的圖片處理利器,朋友可以參考下
    2015-11-11
  • 詳解Python中生成隨機(jī)數(shù)據(jù)的示例詳解

    詳解Python中生成隨機(jī)數(shù)據(jù)的示例詳解

    在日常工作編程中存在著各種隨機(jī)事件,同樣在編程中生成隨機(jī)數(shù)字的時候也是一樣。每當(dāng)在?Python?中生成隨機(jī)數(shù)據(jù)、字符串或數(shù)字時,最好至少大致了解這些數(shù)據(jù)是如何生成的。所以本文將詳細(xì)為大家講解一下Python是如何生成隨機(jī)數(shù)據(jù),需要的可以參考一下
    2022-04-04
  • 利用python批量檢查網(wǎng)站的可用性

    利用python批量檢查網(wǎng)站的可用性

    當(dāng)大家的站點(diǎn)越來越來越多的時候會發(fā)現(xiàn)管理起來也挺復(fù)雜的,所以這篇文章給大家分享下利用python批量檢查網(wǎng)站的可用性的功能,對大家管理網(wǎng)站具有很實(shí)用的價值,有需要的朋友可以參考借鑒。
    2016-09-09
  • 如何通過python實(shí)現(xiàn)全排列

    如何通過python實(shí)現(xiàn)全排列

    這篇文章主要介紹了如何通過python實(shí)現(xiàn)全排列,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • python GUI庫圖形界面開發(fā)之PyQt5窗口控件QWidget詳細(xì)使用方法

    python GUI庫圖形界面開發(fā)之PyQt5窗口控件QWidget詳細(xì)使用方法

    這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5窗口控件QWidget詳細(xì)使用方法,需要的朋友可以參考下
    2020-02-02
  • Python?OpenCV中cv2.minAreaRect實(shí)例解析

    Python?OpenCV中cv2.minAreaRect實(shí)例解析

    minAreaRect的主要作用是獲取一個多邊形(就是有很多個點(diǎn)組成的一個圖形)的最小旋轉(zhuǎn)矩形(旋轉(zhuǎn)矩形就是我們平常見到的水平框帶了角度),這篇文章主要給大家介紹了關(guān)于Python?OpenCV中cv2.minAreaRect的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Django中create和save方法的不同

    Django中create和save方法的不同

    這篇文章主要給大家介紹了關(guān)于Django中create和save方法的不同之處,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Django具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Python+Pygame實(shí)現(xiàn)簡單的單詞小游戲

    Python+Pygame實(shí)現(xiàn)簡單的單詞小游戲

    語言是一種藝術(shù),但是作為語言的基礎(chǔ)——詞匯,卻不像藝術(shù)那樣賞心悅目。不斷的記憶與復(fù)習(xí),讓詞匯成為很多孩子在學(xué)習(xí)英語時,最難完全攻克的關(guān)卡。本文就來用Python制作一個簡單的英語單詞游戲吧
    2023-03-03
  • python?subprocess執(zhí)行外部命令常用方法詳細(xì)舉例

    python?subprocess執(zhí)行外部命令常用方法詳細(xì)舉例

    這篇文章主要給大家介紹了關(guān)于python?subprocess執(zhí)行外部命令常用方法的相關(guān)資料,Python的subprocess模塊提供了一種在Python中調(diào)用外部命令的方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12

最新評論

神池县| 利辛县| 改则县| 南召县| 河间市| 绵竹市| 友谊县| 寿光市| 和田市| 黑山县| 太仓市| 乾安县| 平顶山市| 盐津县| 酉阳| 永登县| 新竹市| 伊宁县| 绥江县| 苍梧县| 河南省| 奉贤区| 怀柔区| 昌江| 平果县| 娄底市| 南平市| 普陀区| 曲麻莱县| 海晏县| 渭源县| 长顺县| 界首市| 东丰县| 炉霍县| 贵溪市| 榆中县| 淄博市| 固阳县| 成武县| 车致|