python爬蟲手機版下載(免費爬蟲網(wǎng)站)
- 夕逆IT
- 數(shù)據(jù)庫
- 2023-08-13
- 139
這篇文章給大家聊聊關于python爬蟲手機版下載,以及免費爬蟲網(wǎng)站對應的知識點,希望對各位有所幫助,不要忘了收藏本站哦。什么是Python爬蟲有什么應用空間Python...
這篇文章給大家聊聊關于python爬蟲手機版下載,以及免費爬蟲網(wǎng)站對應的知識點,希望對各位有所幫助,不要忘了收藏本站哦。
什么是Python爬蟲有什么應用空間
Python爬蟲是什么?
小到從網(wǎng)絡上獲取數(shù)據(jù),大到搜索引擎,都能看到爬蟲的應用,爬蟲的本質(zhì)是利用程序自動的從網(wǎng)絡獲取信息,爬蟲技術也是大數(shù)據(jù)和云計算的基礎。
Python是一門非常適合開發(fā)網(wǎng)絡爬蟲的編程語言,相比于其他靜態(tài)編程語言,Python抓取網(wǎng)頁文檔的接口更簡潔;相比于其他動態(tài)腳本語言,Python的urllib2包提供了較為完整的訪問網(wǎng)頁文檔的API。此外,python中有優(yōu)秀的第三方包可以高效實現(xiàn)網(wǎng)頁抓取,并可用極短的代碼完成網(wǎng)頁的標簽過濾功能。
Python是什么,什么是爬蟲具體該怎么學習
python是一種跨平臺的編程語言,1989年由一個荷蘭人創(chuàng)立的,它的特點是簡潔、易用、可擴展性好,目前編程語言熱度排名在前幾名,可謂非常非常火。
爬蟲一般指網(wǎng)絡爬蟲,是一種可自動獲取網(wǎng)頁內(nèi)容的程序,它一般由控制器、解析器和資源庫組成。python爬蟲是用python語言編寫的爬蟲。
怎么學習python和爬蟲呢?首先,網(wǎng)上的這方面的學習資料是很多的,很多免費教程,例如csdn博客。其次,可以買相關紙質(zhì)或電子書、網(wǎng)絡課程來系統(tǒng)學習。
零基礎小白如何在最短的時間快速入門python爬蟲
答:本文邀請feifan來回答,他總結了使用python自帶庫完成爬蟲的方法,并且列出了爬蟲在實際中可能遇到的幾個問題,教會你零基礎入門python爬蟲~
此處的爬蟲并不是百度或者google這樣需要沿著某條路徑采集互聯(lián)網(wǎng)上所有信息的機器人,而是針對某個特定的網(wǎng)頁,從中提取出我們需要的信息。比如我們在中關村上查到了一臺手機的詳情頁,想把其中的cpu信息、操作系統(tǒng)、分辨率等等字段提出出來。即此處的爬蟲是指針對特定網(wǎng)頁結構、規(guī)模很小、抓取路徑收斂的情況而言。下文我們以一個實例,看看如何從頭寫一個python爬蟲。
抓取頁面基本方法瀏覽器中看到的頁面,實際上是通過一系列的http請求加載并渲染服務器的資源。同理只要我們能夠用python發(fā)出http請求,通過get或post的方法獲得服務器返回的html片段、html頁面或json數(shù)據(jù)串,就可以從中抓取到想要的內(nèi)容。
python中對http請求的封裝是在urllib和urllib2兩個庫里。
urllib提供了一些工具方法,用于對發(fā)送請求時的字符串進行轉(zhuǎn)義或編碼。
發(fā)送get/post請求則需要用到urllib2中提供的幾個類
在掌握了如何在python中構造http請求后,下一步需要做的就是結合具體的網(wǎng)頁,分析出web頁面的請求方式、參數(shù)傳遞方式和必要的header信息(如cookie等)。chrome控制臺的network分析基本上可以滿足需求,但一款抓包利器無疑可以提升我們的效率。推薦使用fiddler進行抓包和解包,可以更清晰第看到http中所用的不同請求方式。
字符串查找、正則表達式、html解析http請求的response通常包含兩種:json字符串,或html代碼片段,信息的提取就轉(zhuǎn)變成了字符串處理。此時無論是通過字符串查找、正則表達式匹配,只要能定位到目標字段即可。
但更好的方法是對html的Dom樹進行解析,尤其是存在多個目標字段需要抓取時,解析html的方式能夠?qū)μ厥飧袷降淖侄涡畔⑦M行批量解析。
這里使用python自帶的htmlparser進行解析,htmlparser對html片段進行深度優(yōu)先的遍歷,在遍歷的過程中可以識別出開始標簽、結束標簽和標簽中的內(nèi)容,因此提供了一種基于標簽tag的編程方式??聪旅娴睦?/p>
需要提取手機的操作系統(tǒng)、核心數(shù)、cpu型號等信息,根據(jù)html的標簽、屬性名稱,代碼如下:
針對中關村上的某個手機詳細
handle_data可以提取html標簽中的數(shù)據(jù),但handle_data存在兩個問題。
(1)當標簽內(nèi)容為空時,handle_data自動跳過該標簽。這里的標簽為空是指標簽中不包含任意字符串內(nèi)容、不包含其他的子標簽。注意,當標簽中含有&nb等空白字符串時,handle_data可以解析出其中的data。比如以下結構中,電話號碼一列允許為空,通過html_parser解析后只得到4個<td>的標簽內(nèi)容。
由于會跳過內(nèi)容為空的標簽的解析,就會打亂html的結構,由于數(shù)據(jù)的缺失返回的list長度不定,導致無法將list中每項內(nèi)容與html中的內(nèi)容對應起來。
(2)標簽中包含子標簽時,內(nèi)容會被分割到不同的handle_data函數(shù)中,比如
由于handle_data是針對每個標簽返回數(shù)據(jù),以上的td里包含了一個span子標簽,handle_data分為2次返回數(shù)據(jù)。即第一次調(diào)用handle_data返回狀態(tài):,第二次調(diào)用handle_data返回已拒絕。我們希望<td>標簽中的內(nèi)容作為整體返回,而現(xiàn)在被分割成了兩塊,同樣會破壞結構。
解決以上兩個問題的關鍵方法在于,使用cache緩存字符串,把對數(shù)據(jù)的處理從handle_data推遲到handle_endtag。只有遇到end_tag時,才能確定標簽閉合,使數(shù)據(jù)完整。
爬蟲被屏蔽后怎么辦服務器會通過一些策略屏蔽惡意爬蟲,以避免對服務器資源的消耗,如檢查同一IP的訪問頻率、訪問間隔等。
所以我們也應該使用一些簡單策略,使我們的爬蟲看起來更像是人的行為,以繞開服務器的檢測機制。常用的方法包括延長相鄰請求的間隔,相鄰間隔使用隨機時長。
在請求的header字段中包含了user-agent字段,服務器通過檢測user-agent字段確定客戶端的類型。如果不指定user-agent字段,請求時腳本會默認填充該字段,如下圖
#python中默認的user-agent字段
網(wǎng)上有一些說法user-agent的值會影響爬蟲是否能夠抓取web內(nèi)容,為了避免爬蟲被屏蔽,將user-agent的值設為瀏覽器的類型:Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/55.0.2883.87Safari/537.36
但在實際抓取的幾個web站點中,user-agent的值對爬蟲被屏蔽沒有影響,在使用時不用刻意設置user-agent的值。
以上的方法都是避免爬蟲被屏蔽掉。但萬一很不幸爬蟲已經(jīng)被屏蔽了,發(fā)出請求返回的結果是輸入驗證碼的頁面,此時該如何解決呢?
對于支持https協(xié)議的站點,此時可以嘗試的一種方案是:改用https協(xié)議。
項目中遇到爬蟲被百度屏蔽的現(xiàn)象,嘗試了很多方法都無效。后來將原來鏈接中的http協(xié)議換成https爬蟲又開始工作了。原理雖然不清楚,但簡單可行。
帶驗證碼的登錄很多web內(nèi)容只有在登錄后才有權限訪問,服務器通過創(chuàng)建session并下發(fā)sessionid來維持與客戶端的鏈接狀態(tài)。客戶端在每次發(fā)送請求時,都在cookie中攜帶sessionid等字段信息。sessionid是無法復用的,也即在瀏覽器中登錄后所獲得的sessionid直接拿到python腳本中使用,返回的結果仍然是跳轉(zhuǎn)到登錄頁面的。因為通過http下發(fā)的sessionid是捆綁到端口號的,也就是與服務器維持通信的是客戶端上的某個進程,把瀏覽器中的sessionid拿到python腳本中,由于更換了進程sessionid當然失效了。
既然無法繞開登錄,我們就在python腳本中完成登錄的過程,拿到登錄后返回的cookie、sessinoid等。這里有兩個難點需要解決,1)服務器登錄邏輯的分析與猜測;2)解決登錄時存在的驗證碼識別問題。
登錄除了需要post提交用戶名、密碼和sessionid之外,通常也會隱式提交部分參數(shù),可以用chrome瀏覽器的調(diào)試模式查看post提交的參數(shù)及對應的值,登錄成功之后,我們就可以拿到返回的cookie值了。
登錄時的驗證碼可以通過OCR自動識別,嘗試了google的tesseract-ocr準確率并不高。所以推薦手動輸入驗證碼,幫助爬蟲完成登錄,畢竟授權只需要一次輸入。
手動輸入驗證碼的思路如下,在請求sessionid的同時保存驗證碼的圖片,人工讀取驗證碼的內(nèi)容,與username和password一起提交。示例代碼如下:
需要抓取javascript加載的結果詳細參考外部鏈接:https://impythonist.wordpress.com/2015/01/06/ultimate-guide-for-scraping-javascript-rendered-web-pages/
這篇文章中的思路是,通過使用webkitlibrary建立本地的javascript執(zhí)行環(huán)境,模擬瀏覽器對頁面的加載渲染,從而抓取javascript處理后的頁面內(nèi)容。
這個例子中javascript所加載的結果,也是通過ajax重新向服務器發(fā)起請求返回的,直接發(fā)送ajax請求并抓取結果即可。在本地搭建javascript的執(zhí)行環(huán)境有些畫蛇添足,但也是一種可以參考的思路。
本文總結了使用python自帶庫完成爬蟲的方法,并且列出了爬蟲在實際中可能遇到的幾個問題,比如爬蟲被屏蔽、需要輸入驗證碼進行登錄等。實踐中的難點在于分析和猜測服務器的登錄邏輯,并且提取必需的參數(shù)完成登錄鑒權。
為什么很多爬蟲用python,用PHP不行嗎
主要看你定義的“爬蟲”干什么用。1、如果是定向爬取幾個頁面,做一些簡單的頁面解析,爬取效率不是核心要求,那么用什么語言差異不大。當然要是頁面結構復雜,正則表達式寫得巨復雜,尤其是用過那些支持xpath的類庫/爬蟲庫后,就會發(fā)現(xiàn)此種方式雖然入門門檻低,但擴展性、可維護性等都奇差。因此此種情況下還是推薦采用一些現(xiàn)成的爬蟲庫,諸如xpath、多線程支持還是必須考慮的因素。
2、如果是定向爬取,且主要目標是解析js動態(tài)生成的內(nèi)容,頁面內(nèi)容是有js/ajax動態(tài)生成的,用普通的請求頁面->解析的方法就不管用了,需要借助一個類似firefox、chrome瀏覽器的js引擎來對頁面的js代碼做動態(tài)解析。此時,推薦考慮casperJS+phantomjs或slimerJS+phantomjs,當然諸如selenium之類的也可以考慮。
3、如果爬蟲是涉及大規(guī)模網(wǎng)站爬取,效率、擴展性、可維護性等是必須考慮的因素時候,涉及諸多問題:I/O機制、分布式爬取、多線程并發(fā)、消息通訊、判重機制、任務調(diào)度等等,此時候語言和所用框架的選取就具有極大意義了。
PHP:對多線程、異步支持較差,不建議采用。
Python:強烈建議,對以上問題都有較好支持。尤其是Scrapy框架值得作為第一選擇。優(yōu)點諸多:支持xpath;基于twisted,性能不錯;有較好的調(diào)試工具;
對于大部分公司還是建議基于一些開源的框架來做,不要自己發(fā)明輪子,做一個簡單的爬蟲容易,但要做一個完備的爬蟲挺難的。
爬蟲技術是什么,真的只能用Python寫嗎
爬蟲一般情況下就是一門下載的技術而已,只是突破了一些網(wǎng)絡和網(wǎng)頁的限制,然后從中下去自己所需要的文字和圖片目前來說的話,其他語言也可以做到爬蟲的功能,但是相對來說的話,Python語言是比較簡單的,所以很多人都利用Python來寫爬蟲。
自學Python來做出一個能爬些信息的爬蟲需要多久時間呢
如果知識單一的需求,不考慮深度學習的話。大概兩個小時左右,大概的流程是,下載安裝python,15分鐘左右找到爬蟲的教程,15分鐘pip庫,然后就開始復制粘貼修改目標網(wǎng)址和數(shù)據(jù)存儲路徑。然后開始爬一直到結束。整個過程2小時。
我覺得帶著目的去學習,是最有效的學習方法。
學習python爬蟲的話必備知識點如下:
最首先要學的是基本的python語法知識學習python爬蟲經(jīng)常用到的幾個內(nèi)之苦:urllib、http這些用于下載網(wǎng)頁學習正則表達式re、BeautifulSoup(bs4)、Xpath等網(wǎng)頁解析工具之后就可以了解一些簡單的網(wǎng)站爬取,可以從百度開始。了解爬取數(shù)據(jù)的過程在上一步之后就可以了解一些爬蟲的反爬機制。header,robot,時間間隔,代理ip。隱含字段等等之后還要了解一些特殊的網(wǎng)站爬取,解決登陸問題比如cookie還有動態(tài)頁面js模擬等問題學習selenium自動化工具,目的是可以應對異步加載頁面在之后就是爬蟲和數(shù)據(jù)庫之間的結合,如何將我們爬取的數(shù)據(jù)進行存儲,Mysql還要學習多線程和異步,這樣可以提高效率還有要了解的是爬蟲的框架如果有較大的數(shù)據(jù)需求的話,要學習redis分布式第一個爬蟲建議從urllib開始,應該很多人的第一個爬蟲代碼都是從這里開始的。短短的幾行代碼就可以搞定一個看似很難的任務。從這里給大家介紹一下:
urllib庫:這是python的內(nèi)置庫,可以說爬蟲非常重要的一個部分。這個內(nèi)之苦可以使用的就是完成向服務器發(fā)出請求并且獲得網(wǎng)頁的功能。這里說一下,python2.x和3.x是有一些出入的。
如何用python抓取一個指定的頁面?
首先創(chuàng)建一個urllib2_test01.py,然后輸入下面的代碼:
最簡單的獲取一個url信息代碼只需要4行就可以搞定的,執(zhí)行寫的python代碼:
會得到下面的內(nèi)容:
下面是編輯urllib_test03.py的過程
這里知識一個初步的介紹。黑馬程序員的視頻庫里面好像有15分鐘學習爬蟲的視頻,大家可以作為參考。
剛剛寫的代碼,打開之后看的不清楚,又重新更新的了圖片。
文章分享結束,python爬蟲手機版下載和免費爬蟲網(wǎng)站的答案你都知道了嗎?歡迎再次光臨本站哦!
本文鏈接:http:///su/2203.html