- N +

python爬蟲課程設計 爬蟲python入門

本篇文章給大家談談python爬蟲課程設計,以及爬蟲python入門對應的知識點,文章可能有點長,但是希望大家可以閱讀完,增長自己的知識,最重要的是希望對各位有所幫助,可以解決了您的問題,不要忘了收藏本站喔。

python爬蟲怎么做

大到各類搜索引擎,小到日常數據采集,都離不開網絡爬蟲。爬蟲的基本原理很簡單,遍歷網絡中網頁,抓取感興趣的數據內容。這篇文章會從零開始介紹如何編寫一個網絡爬蟲抓取數據,然后會一步步逐漸完善爬蟲的抓取功能。

工具安裝

我們需要安裝python,python的requests和BeautifulSoup庫。我們用Requests庫用抓取網頁的內容,使用BeautifulSoup庫來從網頁中提取數據。

安裝python

運行pipinstallrequests

運行pipinstallBeautifulSoup

抓取網頁

完成必要工具安裝后,我們正式開始編寫我們的爬蟲。我們的第一個任務是要抓取所有豆瓣上的圖書信息。我們以https://book.douban.com/subject/26986954/為例,首先看看開如何抓取網頁的內容。

使用python的requests提供的get()方法我們可以非常簡單的獲取的指定網頁的內容,代碼如下:

提取內容

抓取到網頁的內容后,我們要做的就是提取出我們想要的內容。在我們的第一個例子中,我們只需要提取書名。首先我們導入BeautifulSoup庫,使用BeautifulSoup我們可以非常簡單的提取網頁的特定內容。

連續抓取網頁

到目前為止,我們已經可以抓取單個網頁的內容了,現在讓我們看看如何抓取整個網站的內容。我們知道網頁之間是通過超鏈接互相連接在一起的,通過鏈接我們可以訪問整個網絡。所以我們可以從每個頁面提取出包含指向其它網頁的鏈接,然后重復的對新鏈接進行抓取。

通過以上幾步我們就可以寫出一個最原始的爬蟲。在理解了爬蟲原理的基礎上,我們可以進一步對爬蟲進行完善。

寫過一個系列關于爬蟲的文章:https://www.toutiao.com/i6567289381185389064/。感興趣的可以前往查看。

Python基本環境的搭建,爬蟲的基本原理以及爬蟲的原型

Python爬蟲入門(第1部分)

如何使用BeautifulSoup對網頁內容進行提取

Python爬蟲入門(第2部分)

爬蟲運行時數據的存儲數據,以SQLite和MySQL作為示例

Python爬蟲入門(第3部分)

使用seleniumwebdriver對動態網頁進行抓取

Python爬蟲入門(第4部分)

討論了如何處理網站的反爬蟲策略

Python爬蟲入門(第5部分)

對Python的Scrapy爬蟲框架做了介紹,并簡單的演示了如何在Scrapy下進行開發

Python爬蟲入門(第6部分)

Python是什么,什么是爬蟲具體該怎么學習

python是一種跨平臺的編程語言,1989年由一個荷蘭人創立的,它的特點是簡潔、易用、可擴展性好,目前編程語言熱度排名在前幾名,可謂非常非常火。

爬蟲一般指網絡爬蟲,是一種可自動獲取網頁內容的程序,它一般由控制器、解析器和資源庫組成。python爬蟲是用python語言編寫的爬蟲。

怎么學習python和爬蟲呢?首先,網上的這方面的學習資料是很多的,很多免費教程,例如csdn博客。其次,可以買相關紙質或電子書、網絡課程來系統學習。

Python爬蟲如何寫

Python的爬蟲庫其實很多,像常見的urllib,requests,bs4,lxml等,初始入門爬蟲的話,可以學習一下requests和bs4(BeautifulSoup)這2個庫,比較簡單,也易學習,requests用于請求頁面,BeautifulSoup用于解析頁面,下面我以這2個庫為基礎,簡單介紹一下Python如何爬取網頁靜態數據和網頁動態數據,實驗環境win10+python3.6+pycharm5.0,主要內容如下:

Python爬取網頁靜態數據

這個就很簡單,直接根據網址請求頁面就行,這里以爬取糗事百科上的內容為例:

1.這里假設我們要爬取的文本內容如下,主要包括昵稱、內容、好笑數和評論數這4個字段:

打開網頁源碼,對應網頁結構如下,很簡單,所有字段內容都可以直接找到:

2.針對以上網頁結構,我們就可以編寫相關代碼來爬取網頁數據了,很簡單,先根據url地址,利用requests請求頁面,然后再利用BeautifulSoup解析數據(根據標簽和屬性定位)就行,如下:

程序運行截圖如下,已經成功爬取到數據:

Python爬取網頁動態數據

很多種情況下,網頁數據都是動態加載的,直接爬取網頁是提取不到任何數據的,這時就需要抓包分析,找到動態加載的數據,一般情況下就是一個json文件(當然,也可能是其他類型的文件,像xml等),然后請求解析這個json文件,就能獲取到我們需要的數據,這里以爬取人人貸上面的散標數據為例:

1.這里假設我們爬取的數據如下,主要包括年利率,借款標題,期限,金額,進度這5個字段:

2.按F12調出開發者工具,依次點擊“Network”->“XHR”,F5刷新頁面,就可以找到動態加載的json文件,具體信息如下:

3.接著,針對以上抓包分析,我們就可以編寫相關代碼來爬取數據了,基本思路和上面的靜態網頁差不多,先利用requests請求json,然后再利用python自帶的json包解析數據就行,如下:

程序運行截圖如下,已經成功獲取到數據:

至此,我們就完成了利用python來爬取網頁數據。總的來說,整個過程很簡單,requests和BeautifulSoup對于初學者來說,非常容易學習,也易掌握,可以學習使用一下,后期熟悉后,可以學習一下scrapy爬蟲框架,可以明顯提高開發效率,非常不錯,當然,網頁中要是有加密、驗證碼等,這個就需要自己好好琢磨,研究對策了,網上也有相關教程和資料,感興趣的話,可以搜一下,希望以上分享的內容能對你上有所幫助吧,也歡迎大家評論、留言。

零基礎小白如何在最短的時間快速入門python爬蟲

答:本文邀請feifan來回答,他總結了使用python自帶庫完成爬蟲的方法,并且列出了爬蟲在實際中可能遇到的幾個問題,教會你零基礎入門python爬蟲~

此處的爬蟲并不是百度或者google這樣需要沿著某條路徑采集互聯網上所有信息的機器人,而是針對某個特定的網頁,從中提取出我們需要的信息。比如我們在中關村上查到了一臺手機的詳情頁,想把其中的cpu信息、操作系統、分辨率等等字段提出出來。即此處的爬蟲是指針對特定網頁結構、規模很小、抓取路徑收斂的情況而言。下文我們以一個實例,看看如何從頭寫一個python爬蟲。

抓取頁面基本方法

瀏覽器中看到的頁面,實際上是通過一系列的http請求加載并渲染服務器的資源。同理只要我們能夠用python發出http請求,通過get或post的方法獲得服務器返回的html片段、html頁面或json數據串,就可以從中抓取到想要的內容。

python中對http請求的封裝是在urllib和urllib2兩個庫里。

urllib提供了一些工具方法,用于對發送請求時的字符串進行轉義或編碼。

發送get/post請求則需要用到urllib2中提供的幾個類

在掌握了如何在python中構造http請求后,下一步需要做的就是結合具體的網頁,分析出web頁面的請求方式、參數傳遞方式和必要的header信息(如cookie等)。chrome控制臺的network分析基本上可以滿足需求,但一款抓包利器無疑可以提升我們的效率。推薦使用fiddler進行抓包和解包,可以更清晰第看到http中所用的不同請求方式。

字符串查找、正則表達式、html解析

http請求的response通常包含兩種:json字符串,或html代碼片段,信息的提取就轉變成了字符串處理。此時無論是通過字符串查找、正則表達式匹配,只要能定位到目標字段即可。

但更好的方法是對html的Dom樹進行解析,尤其是存在多個目標字段需要抓取時,解析html的方式能夠對特殊格式的字段信息進行批量解析。

這里使用python自帶的htmlparser進行解析,htmlparser對html片段進行深度優先的遍歷,在遍歷的過程中可以識別出開始標簽、結束標簽和標簽中的內容,因此提供了一種基于標簽tag的編程方式。看下面的例子

需要提取手機的操作系統、核心數、cpu型號等信息,根據html的標簽、屬性名稱,代碼如下:

針對中關村上的某個手機詳細

handle_data可以提取html標簽中的數據,但handle_data存在兩個問題。

(1)當標簽內容為空時,handle_data自動跳過該標簽。這里的標簽為空是指標簽中不包含任意字符串內容、不包含其他的子標簽。注意,當標簽中含有&nb等空白字符串時,handle_data可以解析出其中的data。比如以下結構中,電話號碼一列允許為空,通過html_parser解析后只得到4個<td>的標簽內容。

由于會跳過內容為空的標簽的解析,就會打亂html的結構,由于數據的缺失返回的list長度不定,導致無法將list中每項內容與html中的內容對應起來。

(2)標簽中包含子標簽時,內容會被分割到不同的handle_data函數中,比如

由于handle_data是針對每個標簽返回數據,以上的td里包含了一個span子標簽,handle_data分為2次返回數據。即第一次調用handle_data返回狀態:,第二次調用handle_data返回已拒絕。我們希望<td>標簽中的內容作為整體返回,而現在被分割成了兩塊,同樣會破壞結構。

解決以上兩個問題的關鍵方法在于,使用cache緩存字符串,把對數據的處理從handle_data推遲到handle_endtag。只有遇到end_tag時,才能確定標簽閉合,使數據完整。

爬蟲被屏蔽后怎么辦

服務器會通過一些策略屏蔽惡意爬蟲,以避免對服務器資源的消耗,如檢查同一IP的訪問頻率、訪問間隔等。

所以我們也應該使用一些簡單策略,使我們的爬蟲看起來更像是人的行為,以繞開服務器的檢測機制。常用的方法包括延長相鄰請求的間隔,相鄰間隔使用隨機時長。

在請求的header字段中包含了user-agent字段,服務器通過檢測user-agent字段確定客戶端的類型。如果不指定user-agent字段,請求時腳本會默認填充該字段,如下圖

#python中默認的user-agent字段

網上有一些說法user-agent的值會影響爬蟲是否能夠抓取web內容,為了避免爬蟲被屏蔽,將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的值。

以上的方法都是避免爬蟲被屏蔽掉。但萬一很不幸爬蟲已經被屏蔽了,發出請求返回的結果是輸入驗證碼的頁面,此時該如何解決呢?

對于支持https協議的站點,此時可以嘗試的一種方案是:改用https協議。

項目中遇到爬蟲被百度屏蔽的現象,嘗試了很多方法都無效。后來將原來鏈接中的http協議換成https爬蟲又開始工作了。原理雖然不清楚,但簡單可行。

帶驗證碼的登錄

很多web內容只有在登錄后才有權限訪問,服務器通過創建session并下發sessionid來維持與客戶端的鏈接狀態。客戶端在每次發送請求時,都在cookie中攜帶sessionid等字段信息。sessionid是無法復用的,也即在瀏覽器中登錄后所獲得的sessionid直接拿到python腳本中使用,返回的結果仍然是跳轉到登錄頁面的。因為通過http下發的sessionid是捆綁到端口號的,也就是與服務器維持通信的是客戶端上的某個進程,把瀏覽器中的sessionid拿到python腳本中,由于更換了進程sessionid當然失效了。

既然無法繞開登錄,我們就在python腳本中完成登錄的過程,拿到登錄后返回的cookie、sessinoid等。這里有兩個難點需要解決,1)服務器登錄邏輯的分析與猜測;2)解決登錄時存在的驗證碼識別問題。

登錄除了需要post提交用戶名、密碼和sessionid之外,通常也會隱式提交部分參數,可以用chrome瀏覽器的調試模式查看post提交的參數及對應的值,登錄成功之后,我們就可以拿到返回的cookie值了。

登錄時的驗證碼可以通過OCR自動識別,嘗試了google的tesseract-ocr準確率并不高。所以推薦手動輸入驗證碼,幫助爬蟲完成登錄,畢竟授權只需要一次輸入。

手動輸入驗證碼的思路如下,在請求sessionid的同時保存驗證碼的圖片,人工讀取驗證碼的內容,與username和password一起提交。示例代碼如下:

需要抓取javascript加載的結果

詳細參考外部鏈接:https://impythonist.wordpress.com/2015/01/06/ultimate-guide-for-scraping-javascript-rendered-web-pages/

這篇文章中的思路是,通過使用webkitlibrary建立本地的javascript執行環境,模擬瀏覽器對頁面的加載渲染,從而抓取javascript處理后的頁面內容。

這個例子中javascript所加載的結果,也是通過ajax重新向服務器發起請求返回的,直接發送ajax請求并抓取結果即可。在本地搭建javascript的執行環境有些畫蛇添足,但也是一種可以參考的思路。

本文總結了使用python自帶庫完成爬蟲的方法,并且列出了爬蟲在實際中可能遇到的幾個問題,比如爬蟲被屏蔽、需要輸入驗證碼進行登錄等。實踐中的難點在于分析和猜測服務器的登錄邏輯,并且提取必需的參數完成登錄鑒權。

如何用Python爬蟲框架Scrapy做租房項目

先爬租房信息,然后分類整理相關信息,然后就是打電話。之前也想過,只是一直沒有時間,其實用啥來抓不是重點.嘿嘿兄弟加油。

python爬蟲技術能干什么

1、收集數據

python爬蟲程序可用于收集數據。這也是最直接和最常用的方法。由于爬蟲程序是一個程序,程序運行得非常快,不會因為重復的事情而感到疲倦,因此使用爬蟲程序獲取大量數據變得非常簡單和快速。

由于99%以上的網站是基于模板開發的,使用模板可以快速生成大量布局相同、內容不同的頁面。因此,只要為一個頁面開發了爬蟲程序,爬蟲程序也可以對基于同一模板生成的不同頁面進行爬取內容。

2、調研

比如要調研一家電商公司,想知道他們的商品銷售情況。這家公司聲稱每月銷售額達數億元。如果你使用爬蟲來抓取公司網站上所有產品的銷售情況,那么你就可以計算出公司的實際總銷售額。此外,如果你抓取所有的評論并對其進行分析,你還可以發現網站是否出現了刷單的情況。數據是不會說謊的,特別是海量的數據,人工造假總是會與自然產生的不同。過去,用大量的數據來收集數據是非常困難的,但是現在在爬蟲的幫助下,許多欺騙行為會赤裸裸地暴露在陽光下。

3、刷流量和秒殺

刷流量是python爬蟲的自帶的功能。當一個爬蟲訪問一個網站時,如果爬蟲隱藏得很好,網站無法識別訪問來自爬蟲,那么它將被視為正常訪問。結果,爬蟲“不小心”刷了網站的流量。

除了刷流量外,還可以參與各種秒殺活動,包括但不限于在各種電商網站上搶商品,優惠券,搶機票和火車票。目前,網絡上很多人專門使用爬蟲來參與各種活動并從中賺錢。這種行為一般稱為“薅羊毛”,這種人被稱為“羊毛黨”。不過使用爬蟲來“薅羊毛”進行盈利的行為實際上游走在法律的灰色地帶,希望大家不要嘗試。

關于python爬蟲課程設計的內容到此結束,希望對大家有所幫助。

返回列表
上一篇:
下一篇: