用requests.get()之后得到的源代碼跟瀏覽器里面的不一樣
崔慶才的《python3網絡爬蟲開發實戰》在2.3.3節:
我們用urllib或requests獲取到的是HTML源代碼,但是這個網頁是用js渲染的,上面兩個庫不會像瀏覽器那樣繼續運行后面請求來的js模塊,所以不一樣。
==================
Selenium是一個用於測試網站的自動化測試工具,支持各種瀏覽器包括Chrome、Firefox、Safari等主流界面瀏覽器,同時也支持phantomJS無界面瀏覽器。
安裝 Selenium
pip install Selenium
安裝瀏覽器驅動
Selenium3.x調用瀏覽器必須有一個webdriver驅動文件
- Chrome驅動文件下載: 點擊下載chromedrive
- Firefox驅動文件下載: 點解下載geckodriver
下載合適版本文件,解壓,放到某個位置 , 例如 D:\software\geckodriver-v0.30.0-win64\ 。
配置環境變量
設置瀏覽器的地址非常簡單。 我們可以手動創建一個存放瀏覽器驅動的目錄,如: F:\GeckoDriver , 將下載的瀏覽器驅動文件(例如:chromedriver、geckodriver)丟到該目錄下。
我的電腦–>屬性–>系統設置–>高級–>環境變量–>系統變量–>Path,將“F:\GeckoDriver”目錄添加到Path的值中。比如:Path字段;F:\GeckoDriver
示例,點擊百度中的新聞
# -*- coding:UTF-8 -*- from selenium import webdriver from time import sleep #1.創建Chrome瀏覽器對象,這會在電腦上在打開一個瀏覽器窗口 browser = webdriver.Firefox(executable_path ="D:\software\geckodriver-v0.30.0-win64\geckodriver.exe") #2.通過瀏覽器向服務器發送URL請求 browser.get("https://www.baidu.com/") sleep(3) #3.刷新瀏覽器 browser.refresh() #4.設置瀏覽器的大小 browser.set_window_size(1400,800) #5.設置鏈接內容 element=browser.find_element_by_link_text("新聞") element.click()
出現錯誤:
selenium.common.exceptions.WebDriverException: Message: 'geckodriver-v0.30.0-win64' executable may have wrong permissions.
解決方法:
把
browser = webdriver.Firefox(executable_path ="D:\software\geckodriver-v0.30.0-win64\")
修改為:
browser = webdriver.Firefox(executable_path ="D:\software\geckodriver-v0.30.0-win64\geckodriver.exe")
下面示例失敗:
from selenium import webdriver import time browser = webdriver.Firefox(executable_path ="D:\software\geckodriver-v0.30.0-win64\geckodriver.exe") get_html = "test.html" # 打開文件,准備寫入 f = open(get_html, 'wb') url = 'https://www.baidu.com/' # 這里填你要保存的網頁的網址 browser.get(url) time.sleep(2) # 保證瀏覽器響應成功后再進行下一步操作 # 寫入文件 f.write(browser.page_source.encode("gbk", "ignore")) # 忽略非法字符 print('寫入成功') # 關閉文件 f.close()
示例,把百度的首頁保存,保存html (成功)
from selenium import webdriver import time browser = webdriver.Firefox(executable_path ="D:\software\geckodriver-v0.30.0-win64\geckodriver.exe") get_html = "test2.html" # 打開文件,准備寫入 f = open(get_html, "w", encoding='utf-8') url = 'https://www.baidu.com/' # 這里填你要保存的網頁的網址 browser.get(url) time.sleep(2) # 保證瀏覽器響應成功后再進行下一步操作 # 寫入文件 f.write(browser.page_source) # 忽略非法字符 print('寫入成功') # 關閉文件 f.close()
REF
https://blog.csdn.net/weixin_40822925/article/details/106973803
https://blog.csdn.net/weixin_36279318/article/details/79475388