<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
python 3.8
谷歌瀏覽器
selenium(3.141.0)(pip install selenium == 3.141.0)注意4.0系列和3.0系列方法不同
瀏覽器驅動(和你的瀏覽器版本對應)
selenium是一款web自動化測試工具,可以很方便地模擬真實使用者對瀏覽器進行操作,它支援各種主流瀏覽器:IE、Chrome、Firefox、Safari、Opera等。你可以使用selenium做web測試或者爬蟲,自動搶票、自動下單也可以用selenium來做。
網上方法很多,友友們自行搜尋,在這裡提一點注意事項:本文用的是谷歌瀏覽器,瀏覽器驅動要對應谷歌的哦,注意瀏覽器驅動與你的瀏覽器版本相對應,這裡給出谷歌瀏覽器驅動的下載地址,友友們按照自己瀏覽器的版本對應現在即可
http://chromedriver.storage.googleapis.com/index.html
下載完成後注意設定環境變數哦,不設定也行,不設定就要在程式碼中寫上你的Chromedriver.exe檔案的路徑或者不寫路徑將你的Chromedriver.exe和py檔案放到同一目錄下也可以哦
進入鬥魚官網,點到直播,下面的線上直播資訊就是我們需要爬取的
可以看到有標題,型別,姓名,以及熱度,我們爬取這四個欄位就行
然後滑到底部,這裡的下一頁是我們控制爬取頁數的
注意:當我們進入頁面時,雖然有卷軸,但所有直播資訊已經載入好,並不是通過滑動然後Ajax載入的,所以在程式碼中並不需要寫滑動,直接提取就可以拿到整個頁面的資料。
#解析資料的函數 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 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)
#主函數 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()
本文是為了練習selenium而寫的,由於一個頁面有120條資料,所以採集效率較低,感興趣的小夥伴們可以試一試requests庫寫,爬取速度更快哦!希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45