1資訊校驗型反爬蟲之User Agent

2021-10-12 04:23:13 字數 1937 閱讀 5465

測試**

爬取頁面範圍:首頁

爬取資訊:標題、正文、時間

f12重新整理檢視請求型別:get請求且沒有傳遞引數

編寫請求

import requests

# from parsel

url = ''

response = requests.get(url=url)

# 403伺服器已收到請求但是拒絕執行

# 404相應資源不存在

# 200伺服器已經成功處理了請求

print(response.status_code)

print("-"*20)

print(response.text)

輸出結果

403

--------------------

nginx/1.19.4

列印了403狀態碼,說明伺服器已收到請求但是拒絕執行,遇到了反爬蟲,

瀏覽器和測試工具都可以正常訪問,偏偏爬蟲程式不可以,肯定是遇到反爬蟲了。但它究竟是如何識別爬蟲的呢? 3種不同的客戶端向伺服器端發起請求,其中兩種能夠得到正常的響應,python **卻不能,並且是在第一次請求的時候就被拒絕了,說明在第一次訪問時就被識別了。3種不同的客戶端,意味著可能有3種不同的客戶端身份標識,而在http中只有user-agent是最接近身份標識這個答案的。我們不妨嘗試一下, 在爬蟲程式中使用瀏覽器或者postman 的身份標識。requests 庫允許使用自定義的請求頭資訊,我們將剛才的**改為:

瀏覽器請求頭

import requests

from lxml import etree

# 支援正則、css、xpath,不支援bs4

import parsel

url = ''

headers =

# response型別=response = requests.get(url=url, headers=headers)

response_text = response.text

response_html = etree.html(response_text)

print(response.status_code)

result_titles = response_html.xpath("//div[@class='media']/div/h4/a/text()")

result_bodys = response_html.xpath("//div[@class='media']/div/p[1]/text()")

result_times = response_html.xpath("//div[@class='media']/div/p[2]/text()")

print(result_titles)

print(result_bodys)

print(result_times)

輸出結果

200

['中牟縣晨陽路學校:中牟縣小學...', '...省略']

['3月7日上午,中牟縣201...' , '...省略']

['2019-03-08 20:42:37', '2019-03-0...', '...省略']

postman請求頭

# 修改的部分

headers =

輸出結果

200

['中牟縣晨陽路學校:中牟縣小學...', '...省略']

['3月7日上午,中牟縣201...' , '...省略']

['2019-03-08 20:42:37', '2019-03-0...', '...省略']

成功反反爬蟲

glidedsky爬蟲之css反爬蟲

author cjp file cssfan.py time 2020 9 11 16 37 import re from operator import itemgetter import requests from lxml import etree defgao url items heade...

爬蟲練習之了解反爬蟲機制

沒學習之前我理解字面意思就是你爬蟲 然後該 順著你的ip等會對你的網路電腦等造成損失 最簡單的是你爬 獲取不到正確的資訊 案例 爬取拉勾網python職位的薪資等 我們可以看到一般 並不能獲取到需要的資訊 瀏覽器訪問 的時候除了會傳送url,引數等內容外,還會給伺服器端傳遞一些額外的請求頭 requ...

python網路爬蟲之如何偽裝逃過反爬蟲程式的方法

有的時候,我們本來寫得好好的爬蟲 之前還執行得ok,一下子突然報錯了。報錯資訊如下 這是因為你的物件 設定了反爬蟲程式,如果用現有的爬蟲 會被拒絕。之前正常的爬蟲 如下 from urllib.request import urlopen html urlopen scrapeurl bsobj b...