日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

技术深扒丨没点想象力都看不透这个网站的反爬措施!

發布時間:2025/3/21 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 技术深扒丨没点想象力都看不透这个网站的反爬措施! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

所謂萬物皆可爬,寫一段Python代碼,就能讓程序自動進行網站訪問、解析數據并保存下來,再進行下一步分析,這是一項很酷的技能。

當然各網站也有自己的反爬方式,比如判斷用戶IP在短時間內是否頻繁訪問對應網站,比如通過動態頁面增加爬取的難度等。

某點評網的反爬可以說是非常有創意了,它使用svg和亂碼來防止被爬。難爬不說,就算拿到數據,使用者也不知道是什么意思。

點評網的文字甚至都是不能復制粘貼的。

今天我們就來看看,這一網站的反爬措施到底是多么的具有想象力。

1?觀察網站

我們以某商家的電話號碼為例,先看看某點評的反爬措施。

在瀏覽器里按F12打開開發者工具,并使用select工具選中電話,可以看到電話數字除了1以外都是亂碼。

通過仔細觀察發現該電話最后兩個數字都是9,我們對應看到d標簽里面的兩個class是相同。

這說明該class是用來代表某個數字的。我們先把這幾個class和這個數字1弄下來,上Xpath!上正則!

def?get_code(url):response?=?requests.get('url',headers=headers).textitem?=?etree.HTML(response)item?=?item.xpath('//p[@class="expand-info?tel"]')[0]item=etree.tostring(item).decode('utf-8')item?=?re.sub('<span.*?</span>','',item,re.S)items?=?re.findall('<d?class=(.*?)/>|(d+)',item,re.S)phone_list=[]for?i?in?items:phone_list.append(i[0]?if?i[0]!=''?else?i[1])return?phone_list
  • XPath 是一門在 XML 文檔中查找信息的語言,可用于HTML。XPath 可在HTML文檔中對元素和屬性進行遍歷。

  • 正則表達式(Regular Expression,在代碼中常簡寫為regex、regexp或re),是計算機科學的一個概念。正則表達式通常被用來檢索、替換那些符合某個模式(規則)的文本。關于python正則表達式的更多資料,大家可以查看文末的資料福利。

通過正則表達式和xpath我們拿到了一個帶有數字和亂碼的列表,代表的是商家電話號碼。這里把原有的數字放在這里是為了保留原來的順序不變,以便我們后面處理:

再仔細觀察,點擊每個代表數字的d標簽后background里面的兩個數字有變化,說明這里就是控制著數字變化的地方。

我們繼續找,上方還有個background-image,里面有一個以svg結尾的url。直接打開發現,里面不正是我們想要的數字嗎?

2?獲取css數據

同樣按F12打開開發者工具,我們發現這個svg里面包含了4個text標簽,里面有一個x和一個y,里面包含了一堆數字。除此之外,里面還有一段數字文本。

經過我嚴密的推理,這些數字文本應該就是我們需要找的最終目標了,這里面的x和y應該和上面的background有些關系,我們先把這幾個數字拿到手。

首先獲取css

def?get_css(url):response?=?requests.get(url,headers=headers).texthtml?=?etree.HTML(response)css_url?=?html.xpath('//link[@rel="stylesheet"]/@href')return?'http:'+css_url[1]

用requests獲取到css文本,然后print看一下,搜索下上面的class,確保我們找到的css文本正確無誤。

css_url?=?get_css(url) css_header={'Accept':?'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',?'Accept-Encoding':?'gzip,?deflate',?'Accept-Language':?'zh-CN,zh;q=0.9',?'Cache-Control':?'max-age=0',?'Connection':?'keep-alive',?'Host':?'s3plus.meituan.net',?'If-Modified-Since':?'Wed,?06?Mar?2019?14',?'If-None-Match':?'"4684b1c3dee8f4d172b2ac0c11e827a1"',?'Upgrade-Insecure-Requests':?'1',?'User-Agent':?'Mozilla/5.0?(Windows?NT?10.0;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/63.0.3239.132?Safari/537.36'} css=requests.get(css_url,headers=css_header) css.encoding='utf-8' print(css)

繼續用正則表達式根據傳入的class定位到backgrount后面的兩個數字

def?get_xy(code):return?re.search(code+'{background:-(.*?)px?-(.*?)px;}',css.text,re.S).groups()

3?反爬原理

之后就是將text和電話號碼對應起來了。經過我天(wu)才(shu)地(ci)嘗試,電話號碼配對方法是這樣的:這是一個需要三次定位的密碼,分別是y值定位、x值定位,x[index]值定位。

先說說y定位,還記得數字對應的background數字嗎?將后面的數字絕對值(此處是122)加上文字height(此處是30)得到y定位(152)。

使用y定位(152)與前面svg頁面里的text標簽中的y值進行對比,y定位(152)與哪個y值離得最近就取那個分組。本案例中y定位(152)最靠近第四個text標簽(y='145'),所以我們會從第四個分組尋找x定位。

x定位和y定位相似,取的數字是background里面的第一個數字絕對值(302)加上6,得到對應的x定位(308),和x定位數值相同的text里面的數字所在的位置(index)就是我們最后需要的數字(該案例是21)。

最后查看text標簽里的數字(num),x定位的index位置上的數字就是我們要的數字(數字5)。

以上是一份破解點評網反爬的秘籍,請大家多次閱讀理解,也可以在文末找到視頻資料和完整代碼。

要實現上面的揭秘過程,先構建Python函數。這里用到了numpy庫,主要是處理起來比較方便。先xpath得到所有的y值,存儲到array數組中。

def?get_svg(svg_url,x_,y):response?=?requests.get(svg_url)html?=?etree.HTML(response.content)y_list?=?html.xpath('//text/@y')//獲取到所有的yy_list?=?np.array(y_list)y_list=y_list.astype(np.int64)y_index?=?np.abs(y_list-y).argsort()[0]y_?=?y_list[y_index]x=html.xpath('//text[@y="{y}"]/@x'.format(y=y_))num?=?html.xpath('//text[@y="{y}"]/text()'.format(y=y_))dict_x?=?dict(zip(x[0].split(),list(num[0])))return?dict_x[str(x_)]

這里傳入的y值是我們上面background得到的第二個數字,和array數組做個差值,用abs取絕對值,排序,取到差值最小的index,再根據這個Index獲取到我們需要的y值。

之后得到我們對應的那組數,然后繼續xpath,得到了num和x,將他們組裝成一個字典,獲取到正確的數字。遍歷一下codes, 就可以得到最終需要的電話號碼。

自此,我們破解了某點評網的字體反爬。本文用電話號碼舉例,其實抓取網站中的的口味,環境,服務等字段也是同樣的方法。

作為技術,爬蟲是合法合理的。諸如谷歌百度這樣搜索引擎,也都利用爬蟲技術進行全網掃閱,供用戶篩選信息,做成產品。網站和爬蟲之間,有一個類似道德規范的robots協議。

但作為數據分析師,爬取數據前應該想清楚哪些數據是必須的,不做多余動作,節省自己的時間,也節約網站資源。爬取數據對數據分析師來說只是第一步,具備數據分析能力更為重要,如何將代碼工具和分析思維更好的結合,用工具來幫助自己更高效的工作

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的技术深扒丨没点想象力都看不透这个网站的反爬措施!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。