你是如何開始能寫python爬蟲?

來源:互聯網
上載者:User
看完了簡明教程和笨辦法學python,想寫爬蟲,無從做起,需要繼續看什麼書和練習

回複內容:

說說我的經曆吧

我最早是爬蝦米,想看看蝦米聽的比較多的歌是哪些,就爬了蝦米全站的歌曲播放數,做了個統計
Python爬蟲學習記錄(1)——Xiami全站播放數
統計過豆瓣動漫的評分分布
豆瓣2100部動漫頁面的網頁源碼(包括評分,導演,類型,簡介等資訊,附抓取代碼)
爬百度歌詞,做LDA
Python爬蟲學習記錄(2)——LDA處理歌詞
百度音樂帶標籤,作曲,演唱者,類別的歌詞資料
爬足彩網站所有盤口,找贏錢演算法
Python爬蟲學習記錄(4)——傳說中的足彩倍投法。。好像也不是那麼靠譜
2011~2013.5全球所有足球比賽比分資料以及足彩各公司盤口
初期不需要登入的網站比較簡單,掌握http get post和urllib怎麼類比,掌握lxml、BeautifulSoup等parser庫就可以了,多用firefox的firebug或者chrome的調試工具看瀏覽器是怎麼發包的。上面都是不需要登入不需要下檔案就可以做到的。

之後你可能想要下載檔案(圖片,音樂,視頻等),這個可以試試爬蝦米歌曲
Python爬蟲學習記錄(3)——用Python擷取蝦米加心歌曲,並擷取MP3下載地址
爬wallbase壁紙
最近做了個avfun的視頻排行,每天定時抓幾次acfun,然後下載視頻到伺服器緩衝。
Python爬蟲學習記錄(5)——python mongodb + 爬蟲 + web.py 的acfun視頻熱門排行榜
202.120.39.152:8888

然後你可能需要類比使用者登入,爬取需要登入的網站(比如人人,新浪微博)。如果只是小規模爬蟲建議用瀏覽器cookie類比登入
Python爬蟲學習記錄(0)——Python 爬蟲抓站 記錄(蝦米,百度,豆瓣,新浪微博)

===========================
想說的是,不要為了學而學,可以看看有什麼以前覺著很麻煩的操作,是不是能用爬蟲簡化。爬下來的資料是不是有排序篩選分析的價值。

2015-8-31,在csdn上更新了之前失效的百度空間連結,可能有些代碼因為網站的改版不適用了,這裡主要還是提供一些應用的想法。看了大部分回答不禁歎口氣,主要是因為看到很多大牛在回答像“如何入門爬蟲”這種問題的時候,一如當年學霸講解題目,跳步無數,然後留下一句“不就是這樣推嘛”,讓一眾小白菜鳥一臉懵逼。。作為一個0起步(之前連python都不會),目前總算掌握基礎,開始向上進階的菜鳥,深知其中的不易,所以我會在這個回答裡,儘可能全面、細節地分享給大家從0學習爬蟲的各種步驟,如果對你有協助,請點贊~

-------------------------------------------------------------------------------------------------
#我要寫爬蟲!
#Ver.1.2
#Based on: Python 2.7
#Author:高野良

# 原創內容,轉載請註明出處

首先!你要對爬蟲有個明確的認識,這裡引用毛主席的思想:


在戰略上藐視:
  • “所有網站皆可爬”:互連網的內容都是人寫出來的,而且都是偷懶寫出來的(不會第一頁是a,下一頁是8),所以肯定有規律,這就給人有了爬取的可能,可以說,天下沒有不能爬的網站
  • “架構不變”:網站不同,但是原理都類似,大部分爬蟲都是從 發送請求——獲得頁面——解析頁面——下載內容——儲存內容 這樣的流程來進行,只是用的工具不同

在戰術上重視:
  • 持之以恒,戒驕戒躁:對於初學入門,不可輕易自滿,以為爬了一點內容就什麼都會爬了,爬蟲雖然是比較簡單的技術,但是往深學也是沒有止境的(比如搜尋引擎等)!只有不斷嘗試,刻苦鑽研才是王道!(為何有種小學作文即視感)
||
||
V

然後,你需要一個宏偉的目標,來讓你有持續學習的動力(沒有實操項目,真的很難有動力)
我要爬整個豆瓣!...
我要爬整個草榴社區!
我要爬知乎各種妹子的連絡方式*&^#%^$#
||
||
V

接著,你需要捫心自問一下,自己的python基本功吼不吼啊?
吼啊!——OK,開始歡快地學習爬蟲吧 !
不吼? 你還需要學習一個!趕緊回去看廖雪峰老師的教程,
2.7的。至少 這些功能和文法你要有基本的掌握 :
  • list,dict:用來序列化你爬的東西
  • 切片:用來對爬取的內容進行分割,產生
  • 條件判斷(if等):用來解決爬蟲過程中哪些要哪些不要的問題
  • 迴圈和迭代(for while ):用來迴圈,重複爬蟲動作
  • 檔案讀寫操作:用來讀取參數、儲存爬下來的內容等
||
||
V

然後,你需要補充一下下面幾個內容,作為你的知識儲備:
(註:這裡並非要求“掌握”,下面講的兩點,只需要先瞭解,然後通過具體項目來不斷實踐,直到熟練掌握)

1、網頁的基本知識:
基本的HTML語言知識(知道href等大學電腦一級內容即可)
理解網站的發包和收包的概念(POST GET)
稍微一點點的js知識,用於理解動態網頁(當然如果本身就懂當然更好啦)

2、一些分析語言,為接下來解析網頁內容做準備
NO.1 Regex:扛把子技術,總得會最基礎的:


NO.2 XPATH:高效的分析語言,表達清晰簡單,掌握了以後基本可以不用正則
參考:XPath 教程

NO.3 Beautifulsoup:
美麗湯模組解析網頁神器,一款神器,如果不用一些爬蟲架構(如後文講到的scrapy),配合request,urllib等模組(後面會詳細講),可以編寫各種小巧精乾的爬蟲指令碼
官網文檔:Beautiful Soup 4.2.0 文檔
參考案例:

||
||
V
接著,你需要一些高效的工具來輔助
(同樣,這裡先瞭解,到具體的項目的時候,再熟悉運用)
NO.1 F12 開發人員工具:
  • 看原始碼:快速定位元素
  • 分析xpath:1、此處建議Google系瀏覽器,可以在源碼介面直接右鍵看


NO.2 抓包工具:
  • 推薦httpfox,Firefox瀏覽器下的外掛程式,比GoogleFirefox系內建的F12工具都要好,可以方便查看網站收包發包的資訊


NO.3 XPATH CHECKER (Firefox外掛程式):
非常不錯的xpath測試載入器,但是有幾個坑,都是個人踩過的,,在此告誡大家:
1、xpath checker產生的是絕對路徑,遇到一些動態產生的表徵圖(常見的有列表翻頁按鈕等),飄忽不定的絕對路徑很有可能造成錯誤,所以這裡建議在真正分析的時候,只是作為參考
2、記得把如xpath框裡的“x:”去掉,貌似這個是早期版本xpath的文法,目前已經和一些模組不相容(比如scrapy),還是刪去避免報錯


NO.4 正則表達測試載入器:
線上Regex測試 ,拿來多練練手,也輔助分析!裡面有很多現成的Regex可以用,也可以進行參考!
||
||
V
ok!這些你都基本有一些瞭解了,現在開始進入抓取時間,上各種模組吧!python的火,很大原因就是各種好用的模組,這些模組是居家旅行耙梳站常備的——
urllib
urllib2
requests
||
||
V
不想重複造輪子,有沒有現成的架構?
華麗麗的scrapy(這塊我會重點講,我的最愛)
||
||
V
遇到動態網頁面怎麼辦?
selenium(會了這個配合scrapy無往不利,是居家旅行耙梳站又一神器,下一版更新的時候會著重安利,因為這塊貌似目前網上的教程還很少)
||
||
V
爬來的東西怎麼用?
pandas(基於numpy的資料分析模組,相信我,如果你不是專門搞TB級資料的,這個就夠了)
||
||
V
然後是資料庫,這裡我認為開始並不需要非常深入,在需要的時候再學習即可
mysql
mongodb
sqllite
||
||
V
進階技術
多線程
分布式



V1.2更新日誌:修改了一些細節和內容順序
Python入門網路爬蟲之精華版

Python學習網路爬蟲主要分3個大的版塊:抓取分析儲存

另外,比較常用的爬蟲架構Scrapy,這裡最後也詳細介紹一下。

首先列舉一下本人總結的相關文章,這些覆蓋了入門網路爬蟲需要的基本概念和技巧:寧哥的小站-網路爬蟲

當我們在瀏覽器中輸入一個url後斷行符號,後台會發生什嗎?比如說你輸入寧哥的小站(fireling的資料天地)專註網路爬蟲、資料採礦、機器學習方向。,你就會看到寧哥的小站首頁。

簡單來說這段過程發生了以下四個步驟:

  • 尋找網域名稱對應的IP地址。
  • 向IP對應的伺服器發送請求。
  • 伺服器響應請求,發回網頁內容。
  • 瀏覽器解析網頁內容。

網路爬蟲要做的,簡單來說,就是實現瀏覽器的功能。通過指定url,直接返回給使用者所需要的資料,而不需要一步步人工去操縱瀏覽器擷取。

抓取

這一步,你要明確要得到的內容是什嗎?是HTML源碼,還是Json格式的字串等。

1. 最基本的抓取

抓取大多數情況屬於get請求,即直接從對方伺服器上擷取資料。

首先,Python中內建urllib及urllib2這兩個模組,基本上能滿足一般的頁面抓取。另外,requests也是非常有用的包,與此類似的,還有httplib2等等。

Requests:    import requests    response = requests.get(url)    content = requests.get(url).content    print "response headers:", response.headers    print "content:", contentUrllib2:    import urllib2    response = urllib2.urlopen(url)    content = urllib2.urlopen(url).read()    print "response headers:", response.headers    print "content:", contentHttplib2:    import httplib2    http = httplib2.Http()    response_headers, content = http.request(url, 'GET')    print "response headers:", response_headers    print "content:", content
動機上:我想把學校教育系統課程資訊爬下來

操作上:先瞭解 HTTP協議,然後學習使用 Python Requests模組,再實戰。

練習上:先在終端直接操作,試著抓抓http://www.baidu.com ,再把自己寫的爬蟲發布到PIPy…然後,把教務系統2學期2000+門課抓下來,還嘗試攻擊了一個小夥伴的網站…把它搞掛啦!

具體可以看這篇部落格,寫一個 Python 爬蟲
https://jenny42.com/2015/02/write-a-spider-use-python/

突然發現我這個其實不算爬蟲,頂多算抓取網頁。因為我沒有學 xPath 和 CSSSelect 那些東西,沒有把網站爬個遍…

你會發現,儘管我的爬蟲技術還很爛…但是我做的大部分嘗試都是有反饋的,比如發布模組可以看到下載次數(心想著這種坑爹模組也有人下載啊),抓教務系統資料很好玩(我發現全校有250個左右的同學重名)…把小夥伴的網站搞垮再去報Bug…但我覺得這樣學習很有趣。

而且我覺得我對之後學:怎麼抓需要驗證碼的網站,怎麼把網站爬個遍之類的進階技能也高度興趣~剛開始只是簡單的看了下 Python, 簡單的寫些小程式,小工具之類的,感受到了它的簡潔與強大。

突然就想寫個爬蟲試試,那就爬我最喜歡的音樂網站落網 ,爬了從第一期到到現在的所有音樂,包括每期的圖片。還另外寫了一個自動下載當前最新一期的所有歌曲的指令碼。還試著用工具 PyInstaller 打包成了 exe,分享給了我幾個同樣喜歡落網的朋友。↓這是我爬的成果。


關於如何學,我只是個新手,談不上指導,就說說我自己怎麼做的吧:
  1. 首先基本的 Python 文法你要瞭解吧,推薦一本書《Python基礎教程》,很適合入門。
  2. 其次分析你的爬蟲需求。程式具體流程是怎麼樣的?把程式的大致架構搭起來。另外可能還有哪些痛點?
  3. 然後瞭解一下一般寫爬蟲需要用哪些庫,這些庫可以很好的協助你解決很多問題。推薦強悍的 Requests: HTTP for Humans 另外還有其他一些庫 如 urllib2 BeautifulSoup 都可以瞭解下。
  4. 動手開始寫了,遇到問題 Google 即可,Google 不行就上知乎問,我遇到的一個問題就是知乎私信大牛解決的。在寫的過程中還會學到很多相關的知識,比如說HTTP協議, 多線程 等等。
或者你也可以直接用別人的架構,如其它人提到的 Scrapy ,不用重複造輪子。網路上很多你需要重複去做的,都可以寫python指令碼去做。
比如知乎的一些好文章,你要儲存下來,或者自動定期發送到kindle電子書

python爬蟲 推送知乎文章到kindle電子書


python 暴力破解wordpress部落格後台登陸密碼



批量擷取色影無忌圖片 Python_小組 (連結修複中)
用python破解某211大學BBS論壇使用者密碼 (連結修複中)
感覺都是自己為了完成某種目的而且做得,這樣動機會更加明確。 目前準備爬取股票資訊,做研究使用(炒股啦)
更多 30天嘗試新事情 第一次想寫爬蟲是為了抓取草榴的高點擊率視頻連結。代碼如下。需要翻牆。
# -- coding: utf-8 --import urllib2import sysfrom bs4 import BeautifulSoupreload(sys)sys.setdefaultencoding('utf8')                          #解決寫入檔案亂碼問題BaseUrl = "http://t66y.com/"j=1for i in range(1, 100):                                 #設定始末頁碼  url = "http://t66y.com/thread0806.php?fid=22&search=&page="+ str(i)  #預設str會把字串變成unicode,所以開頭必須用sys來重設  page = urllib2.urlopen(url)  soup = BeautifulSoup(page, from_encoding="gb18030")   #解決BeautifulSoup中文亂碼問題  print("reading page "+ str(i))  counts = soup.find_all("td", class_="tal f10 y-style")  for count in counts:    if int(count.string)>15:                            #選擇想要的點擊率      videoContainer = count.previous_sibling.previous_sibling.previous_sibling.previous_sibling      video = videoContainer.find("h3")      print("Downloading link "+ str(j))      line1 = (video.get_text())      line2 = BaseUrl+video.a.get('href')      line3 = "view **" + count.string + "** "      print line1      f = open('cao.md', 'a')      f.write("\n"+"###"+" "+line1+"\n"+"<"+line2+">"+"\n"+line3+ "  "+ "page"+str(i)+"\n")      f.close()      j+=1
只推薦一個庫不解釋:

Requests: HTTP for Humans 最開始看了寫Simplecd那個人的部落格開始瞭解原來Python寫爬蟲這麼牛逼。

然後寫了指令碼1W+豆瓣電影的評分頁面。之後實驗室有項目,寫了指令碼爬了50W條微博,中途熟悉如何類比登入騙過伺服器是最有趣的部分。

總結,你看看之前人的部落格就行了,簡單的爬蟲用不到多高深的技術,無非就是幾個:
1.熟悉一下urllib的使用
2.瞭解基本的html解析,通常來說最基本的正則就夠用了不知題主的編程基礎如何,基本上想寫Python爬蟲只需要看下前人的日誌學習下urllib和BeautifulSoup就夠用了。

另外如果有千人的實際例子看一下應該能比較直觀的明白一個爬蟲是怎麼跑起來的。
在下不才,寫過一個爬知乎資料的爬蟲, 開源於(各位親走過路過的時候請給 點個Star或Fork唄~):MorganZhang100/zhihu-spider · GitHub
該爬蟲爬到的資料應用於:http://zhihuhot.sinaapp.com/

簡單點說就是一個爬取問題的一些參數,進行分析,找出最可能會火的問題。據此回答問題的話,得贊速度比之前多20倍左右。

我對Python也不是很熟悉,不過一共只有幾百行的代碼,題主看看應該問題不大。

其實學任何東西,看得教程再多也比不上自己實習寫幾行代碼來得有效果。只要開始寫了,你就知道你需要什麼了。
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.