2024/04/14

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. #讀取資料
  14. f = open("url.csv","r")
  15. s = f.readlines()
  16. c = "科目,示例名稱,網址,介紹\n" #設定寫出檔案的第一行
  17. for i in range(1,len(s)):
  18. url=s[i]
  19. list=url.split(",") #分割串列
  20. # print(list[2].replace('\n','')) #第3筆是最後1筆資料會有換行符號,須去掉
  21. browser.get(list[2].replace('\n','')) #載入網址
  22. time.sleep(3) #等待3秒載入網頁
  23. #tagX = browser.find_element_by_xpath("//meta[@name='description']") # meta標籤 name屬性值為'description'的元素
  24. #新的方法
  25. tagX = browser.find_element("xpath","//meta[@name='description']")
  26. #tag = browser.find_element_by_id('description') #資訊所在的DIV id 現在不能直接抓Html
  27. #print(tagX.get_attribute("content")) #取出其中的content屬性值
  28. tag = tagX.get_attribute("content")
  29. tag2 = tag.replace('\n','').replace('\r','') #用空字串取代所有換行符號 ,不能用strip刪除
  30. #tag2=tag.text.replace('\n','').replace('\r','') #用空字串取代所有換行符號 ,不能用strip刪除
  31. # print(tag2)
  32. # print(len(tag2))
  33. # 因為沒有資訊也同樣能抓到空字串,不會出現錯誤
  34. # try:
  35. # tag = browser.find_element_by_id('description')
  36. # tag2=tag.text.replace('\n', '').replace('\r', '')
  37. # c +="{},{},{},{}".format(list[0],list[1],list[2],tag2)
  38. # print(c)
  39. # except:
  40. # c +="{},{},{},{}".format(list[0],list[1],list[2],"無說明")
  41. # continue
  42. # print(c)
  43. # 改用 if判斷 len(tag2)是否>0
  44. if i < len(s)-1: #如果不是最後一筆才加分行符號
  45. if len(tag2) > 0 :
  46. print(tag2)
  47. c +="{},{},{},{}\n".format(list[0],list[1],list[2].replace('\n',''),tag2)
  48. else:
  49. tag2="無內容資訊"
  50. c +="{},{},{},{}\n".format(list[0],list[1],list[2].replace('\n',''),tag2)
  51. print(tag2)
  52. else:
  53. if len(tag2) > 0 :
  54. print(tag2)
  55. c +="{},{},{},{}".format(list[0],list[1],list[2].replace('\n',''),tag2)
  56. else:
  57. tag2="無內容資訊"
  58. c +="{},{},{},{}".format(list[0],list[1],list[2].replace('\n',''),tag2)
  59. print(tag2)
  60. #寫出資料
  61. fw=open("c.txt","w",encoding="utf8")
  62. fw.write(c)
  63. fw.close()
  64. print(c)
  65. browser.close() #關閉 瀏覽器
  66. 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入门超详细教程——网页自动化操作

2 則留言: