使用selenium + webdriver
配置chromedriver
配置環境變數,路徑為放置檔案的路徑
爬取具體過程
首先輸入要獲取頁面的**,一般沒有登陸過會自動跳轉到登陸頁面,此時對登陸頁面進行解析,獲得輸入賬號密碼驗證碼的位置,此處賬號密碼設定到程式中自動輸入,驗證碼由自己輸入。
然後登入到頁面後,發現用requests不能成功請求跳轉頁面,每次都是獲取到登入頁面,我覺得是因為requests又要請求一次連線,被認定為第二次連線了,所以在這裡我們不採用requests,我們繼續採用webdriver
driver.page_source #這個就可以獲取到頁面**
附上原始碼:
def loginsys():
print('開始登陸')
vcode = input("vcode:") # 請求驗證碼,人工識別後輸入
time.sleep(0.2) # 停頓模擬真實操作情況,降低被**發現的機率
time.sleep(0.2)
driver.implicitly_wait(0.2)
driver.find_element_by_id('login_btn').click() # 點選登入
這裡我們使用beautifulsoup,這裡的html就是上面的driver.page_source ,然後利用.find .find_all 等方法來抓取所需要的內容
soup = beautifulsoup(html, 'html.parser') # 從網頁抓取資料
driver.find_element_by_xpath('//*[@id="information"]/div[3]/div/button[2]').click()
但是我們發現不定時會報錯:
selenium.common.exceptions.elementclickinterceptedexception: message: element click intercepted: element ... is not clickable at point (1066, 547). other element would receive the click:
...(session info: chrome=95.0.4638.69)
經過蒐集資料可以使用另乙個呼叫 click 事件的方法代替 click() 方法:
element1 = driver.find_element_by_xpath('//*[@id="information"]/div[3]/div/button[2]')
driver.execute_script("arguments[0].click();", element1)
編寫爬蟲遇到的問題總結
1,編碼問題 設定檔案編碼格式utf 8 2.連線超時 異常或者設定timeout 沒有設定timeout引數,結果在網路環境不好的情況下,時常出現read 方法沒有任何反應的問題,程式卡死在read 方法裡,搞了大半天,才找到問題,給urlopen加上timeout就ok了,設定了timeout之...
簡單爬蟲總結
url url主要有三部分組成 1 協議,常見的協議有http,https,ftp,file 訪問本地資料夾 ed2k 電驢的專用鏈結 等等。2 存放資源的伺服器的網域名稱系統 dns 主機名或者ip位址 有時候包含埠號,各種傳輸協議都有預設的埠號 3 主機資源的具體位址,如目錄和檔名等 注意 第一...
爬蟲總結(一)
requests模組 response urllib2.urlopen 讀取html原始碼使用read方法 html response.read 1.構造request物件 get請求 url 這種request是get請求,因為沒有給data傳值,如果需要使用get方式傳參,可以把引數經過urll...