日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

前言

目前是直播行業的一個爆發期,由于國家對直播行業進行整頓和規范,現在整個直播行業也在穩固發展。隨著互聯網和網絡直播市場的快速發展,相信未來還有廣闊的發展前景。今天用selenium爬取一下斗魚直播信息將代碼分享給大家

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

Python/ target=_blank class=infotextkey>Python 3.8

谷歌瀏覽器

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

瀏覽器驅動(和你的瀏覽器版本對應)

二、selenium的介紹和瀏覽器驅動的安裝

1.selenium的介紹

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

2.瀏覽器驅動的安裝

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

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

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

三、代碼思路分析

進入斗魚官網,點到直播,下面的在線直播信息就是我們需要爬取的

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

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

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

1.解析數據的函數

 #解析數據的函數
    def parse(self):
        #強制等待兩秒,等待頁面數據加載完畢
        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.保存數據的函數

 #解析數據的函數
    def parse(self):
        #強制等待兩秒,等待頁面數據加載完畢
        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文本

#保存數據的函數
    def save_data(self,data_list,i):
        #在當前目錄下將數據存為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文件

#保存數據的函數
    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.主函數設計

#主函數
    def run(self):
        #輸入要爬取的頁數,如果輸入負整數,轉化成她的絕對值
        page_num = abs(int(input("請輸入你要爬取的頁數:")))
        #初始化頁數為1
        i = 1
        #判斷輸入的數是否為整數
        if isinstance(page_num,int):
            #實例化瀏覽器對象
            self.bro = webdriver.Chrome(executable_path='../../可執行文件/chromedriver.exe')
            # chromedriver.exe如果已添加到環境變量,可省略executable_path='../../可執行文件/chromedriver.exe'
            self.bro.get(self.url)
            while i <= page_num:
                #調用解析函數
                data_list = self.parse()
                #調用保存函數
                self.save_data(data_list,i)
                try:
                    #定位包含“下一頁”字段的按鈕并點擊
                    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
#創建一個類
class Douyu():
    def __init__(self):
        self.url = 'https://www.douyu.com/directory/all'
    #解析數據的函數
    def parse(self):
        #強制等待兩秒,等待頁面數據加載完畢
        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
    #保存數據的函數
    def save_data(self,data_list,i):
        #在當前目錄下將數據存為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)
    #主函數
    def run(self):
        #輸入要爬取的頁數,如果輸入負整數,轉化成她的絕對值
        page_num = abs(int(input("請輸入你要爬取的頁數:")))
        #初始化頁數為1
        i = 1
        #判斷輸入的數是否為整數
        if isinstance(page_num,int):
            #實例化瀏覽器對象
            self.bro = webdriver.Chrome(executable_path='../../可執行文件/chromedriver.exe')
            # chromedriver.exe如果已添加到環境變量,可省略executable_path='../../可執行文件/chromedriver.exe'
 
            self.bro.get(self.url)
            while i <= page_num:
                #調用解析函數
                data_list = self.parse()
                #調用保存函數
                self.save_data(data_list,i)
                try:
                    #定位包含“下一頁”字段的按鈕并點擊
                    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()

分享到:
標簽:爬蟲 網絡
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定