在 Py / 透過selenium-webdriver爬youtube的介紹資訊(2021/10/28修改)
所引用的selenium-webdriver 在更新之後,目前selenium版本是4.19.0
可以不用設置driver.exe的路徑,selenium可以處理瀏覽器和驅動程序
抓取網頁元素的方式也有改變
更新之後的程式碼如下
- from selenium import webdriver
- # 2024.04.03 更新為 4.19.0 許多方法變動
- import time
- #
- #目前使用的selenium版本是4.19.0,可以不必设置driver.exe的路径,selenium可以自己处理浏览器和驱动程序
- #chromedriver.exe執行檔所存在的路徑 須配合電腦上的chrome版本
- #chrome_path =r”C:\Users\trico\Desktop\chromedriver\chromedriver.exe”
- #chrome_path =r”D:\chromedriver_win32\chromedriver.exe”
- options = webdriver.ChromeOptions() #透過options紀錄webdriver.ChromeOptions()的設定
- options.add_argument(“–headless”) #增加啟動參數,瀏覽器頁面不可視化(背景執行)
- browser = webdriver.Chrome(options)
- #讀取資料
- f = open(“url.csv”,“r”)
- s = f.readlines()
- c = “科目,示例名稱,網址,介紹\n” #設定寫出檔案的第一行
- for i in range(1,len(s)):
- url=s[i]
- list=url.split(“,”) #分割串列
- # print(list[2].replace(‘\n’,”)) #第3筆是最後1筆資料會有換行符號,須去掉
- browser.get(list[2].replace(‘\n’,”)) #載入網址
- time.sleep(3) #等待3秒載入網頁
- #tagX = browser.find_element_by_xpath(“//meta[@name=’description’]”) # meta標籤 name屬性值為’description’的元素
- #新的方法
- tagX = browser.find_element(“xpath”,“//meta[@name=’description’]”)
- #tag = browser.find_element_by_id(‘description’) #資訊所在的DIV id 現在不能直接抓Html
- #print(tagX.get_attribute(“content”)) #取出其中的content屬性值
- tag = tagX.get_attribute(“content”)
- tag2 = tag.replace(‘\n’,”).replace(‘\r’,”) #用空字串取代所有換行符號 ,不能用strip刪除
- #tag2=tag.text.replace(‘\n’,”).replace(‘\r’,”) #用空字串取代所有換行符號 ,不能用strip刪除
- # print(tag2)
- # print(len(tag2))
- # 因為沒有資訊也同樣能抓到空字串,不會出現錯誤
- # try:
- # tag = browser.find_element_by_id(‘description’)
- # tag2=tag.text.replace(‘\n’, ”).replace(‘\r’, ”)
- # c +=”{},{},{},{}”.format(list[0],list[1],list[2],tag2)
- # print(c)
- # except:
- # c +=”{},{},{},{}”.format(list[0],list[1],list[2],”無說明”)
- # continue
- # print(c)
- # 改用 if判斷 len(tag2)是否>0
- if i < len(s)-1: #如果不是最後一筆才加分行符號
- if len(tag2) > 0 :
- print(tag2)
- c +=“{},{},{},{}\n”.format(list[0],list[1],list[2].replace(‘\n’,”),tag2)
- else:
- tag2=“無內容資訊”
- c +=“{},{},{},{}\n”.format(list[0],list[1],list[2].replace(‘\n’,”),tag2)
- print(tag2)
- else:
- if len(tag2) > 0 :
- print(tag2)
- c +=“{},{},{},{}”.format(list[0],list[1],list[2].replace(‘\n’,”),tag2)
- else:
- tag2=“無內容資訊”
- c +=“{},{},{},{}”.format(list[0],list[1],list[2].replace(‘\n’,”),tag2)
- print(tag2)
- #寫出資料
- fw=open(“c.txt”,“w”,encoding=“utf8”)
- fw.write(c)
- fw.close()
- print(c)
- browser.close() #關閉 瀏覽器
- print(“完成”)
如果引用from selenium.webdriver.common.by import By
tagX = browser.find_element("xpath","//meta[@name='description']")
就要改成
tagX = browser.find_element(By.xpath,"//meta[@name='description']")