python爬蟲(chóng)手機(jī)版下載(免費(fèi)爬蟲(chóng)網(wǎng)站)
夕逆IT
- 數(shù)據(jù)庫(kù)
- 2023-08-13
- 139

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