国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

關于反爬蟲的一些簡單總結

2020-02-16 11:03:49
字體:
來源:轉載
供稿:網友

爬蟲與反爬蟲,這相愛相殺的一對,簡直可以寫出一部壯觀的斗爭史。而在大數據時代,數據就是金錢,很多企業都為自己的網站運用了反爬蟲機制,防止網頁上的數據被爬蟲爬走。然而,如果反爬機制過于嚴格,可能會誤傷到真正的用戶請求;如果既要和爬蟲死磕,又要保證很低的誤傷率,那么又會加大研發的成本。

簡單低級的爬蟲速度快,偽裝度低,如果沒有反爬機制,它們可以很快的抓取大量數據,甚至因為請求過多,造成服務器不能正常工作。

1、爬取過程中的302重定向

在爬取某個網站速度過快或者發出的請求過多的時候,網站會向你所在的客戶端發送一個鏈接,需要你去驗證圖片。我在爬鏈家和拉鉤網的過程中就曾經遇到過:

對于302重定向的問題,是由于抓取速度過快引起網絡流量異常,服務器識別出是機器發送的請求,于是將請求返回鏈接定到某一特定鏈接,大多是驗證圖片或空鏈接。

在這種時候,既然已經被識別出來了,就使用代理ip再繼續抓取。

2、headers頭文件

有些網站對爬蟲反感,對爬蟲請求一律拒絕,這時候我們需要偽裝成瀏覽器,通過修改http中的headers來實現

headers = {'Host': "bj.lianjia.com",'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",'Accept-Encoding': "gzip, deflate, sdch",'Accept-Language': "zh-CN,zh;q=0.8",'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36",'Connection': "keep-alive",}p = requests.get(url, headers=headers)print(p.content.decode('utf-8'))

3、模擬登陸

一般登錄的過程都伴隨有驗證碼,這里我們通過selenium自己構造post數據進行提交,將返回驗證碼圖片的鏈接地址輸出到控制臺下,點擊圖片鏈接識別驗證碼,輸入驗證碼并提交,完成登錄。

from selenium import webdriverfrom selenium.webdriver.common.keys import Keys #from selenium.webdriver.support.ui import WebDriverWait # WebDriverWait的作用是等待某個條件的滿足之后再往后運行from selenium.webdriver import ActionChainsimport timeimport sysdriver = webdriver.PhantomJS(executable_path='C:/PyCharm 2016.2.3/phantomjs/phantomjs.exe') # 構造網頁驅動driver.get('https://www.zhihu.com/#signin')  # 打開網頁driver.find_element_by_xpath('//input[@name="password"]').send_keys('your_password')driver.find_element_by_xpath('//input[@name="account"]').send_keys('your_account')driver.get_screenshot_as_file('zhihu.jpg')     # 截取當前頁面的圖片input_solution = input('請輸入驗證碼 :')driver.find_element_by_xpath('//input[@name="captcha"]').send_keys(input_solution)time.sleep(2)driver.find_element_by_xpath('//form[@class="zu-side-login-box"]').submit() # 表單的提交 表單的提交,即可以選擇登錄按鈕然后使用click方法,也可以選擇表單然后使用submit方法sreach_widonw = driver.current_window_handle  # 用來定位當前頁面# driver.find_element_by_xpath('//button[@class="sign-button submit"]').click()try:dr = WebDriverWait(driver,5)# dr.until(lambda the_driver: the_driver.find_element_by_xpath('//a[@class="zu-side-login-box"]').is_displayed())if driver.find_element_by_xpath('//*[@id="zh-top-link-home"]'):print('登錄成功')except:print('登錄失敗')driver.save_screenshot('screen_shoot.jpg')  #截取當前頁面的圖片sys.exit(0)driver.quit() #退出驅動            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 赤峰市| 东宁县| 河北区| 翁源县| 张家界市| 讷河市| 新龙县| 内黄县| 西畴县| 西城区| 香河县| 景泰县| 墨脱县| 全州县| 南京市| 民和| 太康县| 体育| 盐边县| 五河县| 铜川市| 肃南| 大石桥市| 仪陇县| 柳州市| 措美县| 香格里拉县| 定州市| 鄱阳县| 兖州市| 新余市| 介休市| 常熟市| 四平市| 崇左市| 呼图壁县| 鄂托克旗| 吴江市| 广灵县| 汪清县| 汪清县|