Py / 透過selenium-webdriver爬youtube的介紹資訊 2

在 Py / 透過selenium-webdriver爬youtube的介紹資訊(2021/10/28修改)

所引用的selenium-webdriver 在更新之後,目前selenium版本是4.19.0

可以不用設置driver.exe的路徑,selenium可以處理瀏覽器和驅動程序

抓取網頁元素的方式也有改變

更新之後的程式碼如下


  1. from selenium import webdriver
  2. # 2024.04.03 更新為 4.19.0 許多方法變動
  3. import time
  4. #
  5. #目前使用的selenium版本是4.19.0,可以不必设置driver.exe的路径,selenium可以自己处理浏览器和驱动程序
  6. #chromedriver.exe執行檔所存在的路徑 須配合電腦上的chrome版本
  7. #chrome_path =r”C:\Users\trico\Desktop\chromedriver\chromedriver.exe”
  8. #chrome_path =r”D:\chromedriver_win32\chromedriver.exe”
  9. options = webdriver.ChromeOptions() #透過options紀錄webdriver.ChromeOptions()的設定
  10. options.add_argument(“–headless”) #增加啟動參數,瀏覽器頁面不可視化(背景執行)
  11. browser = webdriver.Chrome(options)
  12. #讀取資料
  13. f = open(“url.csv”,“r”)
  14. s = f.readlines()
  15. c = “科目,示例名稱,網址,介紹\n” #設定寫出檔案的第一行
  16. for i in range(1,len(s)):
  17. url=s[i]
  18. list=url.split(“,”) #分割串列
  19. # print(list[2].replace(‘\n’,”)) #第3筆是最後1筆資料會有換行符號,須去掉
  20. browser.get(list[2].replace(‘\n’,)) #載入網址
  21. time.sleep(3) #等待3秒載入網頁
  22. #tagX = browser.find_element_by_xpath(“//meta[@name=’description’]”) # meta標籤 name屬性值為’description’的元素
  23. #新的方法
  24. tagX = browser.find_element(“xpath”,“//meta[@name=’description’]”)
  25. #tag = browser.find_element_by_id(‘description’) #資訊所在的DIV id 現在不能直接抓Html
  26. #print(tagX.get_attribute(“content”)) #取出其中的content屬性值
  27. tag = tagX.get_attribute(“content”)
  28. tag2 = tag.replace(‘\n’,).replace(‘\r’,) #用空字串取代所有換行符號 ,不能用strip刪除
  29. #tag2=tag.text.replace(‘\n’,”).replace(‘\r’,”) #用空字串取代所有換行符號 ,不能用strip刪除
  30. # print(tag2)
  31. # print(len(tag2))
  32. # 因為沒有資訊也同樣能抓到空字串,不會出現錯誤
  33. # try:
  34. # tag = browser.find_element_by_id(‘description’)
  35. # tag2=tag.text.replace(‘\n’, ”).replace(‘\r’, ”)
  36. # c +=”{},{},{},{}”.format(list[0],list[1],list[2],tag2)
  37. # print(c)
  38. # except:
  39. # c +=”{},{},{},{}”.format(list[0],list[1],list[2],”無說明”)
  40. # continue
  41. # print(c)
  42. # 改用 if判斷 len(tag2)是否>0
  43. if i < len(s)-1: #如果不是最後一筆才加分行符號
  44. if len(tag2) > 0 :
  45. print(tag2)
  46. c +=“{},{},{},{}\n”.format(list[0],list[1],list[2].replace(‘\n’,),tag2)
  47. else:
  48. tag2=“無內容資訊”
  49. c +=“{},{},{},{}\n”.format(list[0],list[1],list[2].replace(‘\n’,),tag2)
  50. print(tag2)
  51. else:
  52. if len(tag2) > 0 :
  53. print(tag2)
  54. c +=“{},{},{},{}”.format(list[0],list[1],list[2].replace(‘\n’,),tag2)
  55. else:
  56. tag2=“無內容資訊”
  57. c +=“{},{},{},{}”.format(list[0],list[1],list[2].replace(‘\n’,),tag2)
  58. print(tag2)
  59. #寫出資料
  60. fw=open(“c.txt”,“w”,encoding=“utf8”)
  61. fw.write(c)
  62. fw.close()
  63. print(c)
  64. browser.close() #關閉 瀏覽器
  65. 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']")

參考資料

爬虫学习记录(持续更新)

selenium 4.19.0

selenium入门超详细教程——网页自动化操作