分享一則對於網抓中面對post請求訪問的頁面或者在分頁過程中需要post請求才可以訪問的內容!
面的post請求的網址是不可以零參訪問網址的,所以我們在網抓的過程中需要給請求傳表單數據,下面看一下網頁中post請求的網址:
post請求狀態碼和get請求的狀態碼一致,但是在參數中我們可以看到表單數據有很多的參數:
其中的__VIEWSTATE是必須要傳的參數,而這個參數是在源碼中能獲取到的,這個__VIEWSTATE是asp.net中特有的,所以只有在訪問asp.net的網站的時候這個參數是必須傳的,其他的網站,只要有參數變化的表單數據就需要傳到post請求中!
我們在轉頁的過程中會看到類似於這樣的表單,那后面的數字就是我們轉頁后的頁碼!所以我們的這個參數也要傳,獲取轉頁的頁碼的總數,同樣可以在源碼中獲取,如果只顯示了1234頁,那就需要計算你需要的內容有多少個,每一頁的內容個數,做一個取余算法就可以算出來了!
現在定義一個post_data:
1 post_data={"__EVENTTARGET":"Pager1","__EVENTARGUMENT":page_num,"ddlManufacturer":"0","Pager1_input":str(page_num-1)}
這是我自定義的post參數,page_num代表着分頁的頁碼。
__VIEWSTATE是在源碼中,這里分享的是xpath方法:
1 a = doc.xpath('//input[@id="__VIEWSTATE"]') 2 if len(a) > 0: 3 post_data['__VIEWSTATE'] = a[0].get('value')
使用BeautifulSoup就是:
1 soup = BeautifulSoup(h,"html.parser") 2 a = soup.find('input',id='__VIEWSTATE') 3 if a: 4 post_data['__VIEWSTATE'] = a['value']
獲取到重要的表單數據后,我們就只需要傳參訪問網頁源碼了!
1 r2 = requests.post(url,data=post_data,headers=headers,timeout=20) 2 ht2 = r2.content #這里就是訪問的網頁源碼!
xpath的解析代碼: doc2 = HTML.document_fromstring(網頁源碼)
網頁的簡單post請求就是這樣來傳遞參數,訪問的!我自己還有很多的學習資料分享在607021567qq群里面了!還有微信飛機大戰的源代碼分享!