Python小白寫的三個入門級的爬蟲(附代碼和注釋)

來源:互聯網
上載者:User

標籤:去掉   地址   工具   ade   瀏覽器   odi   src   .json   賦值   

Python小白寫的三個入門級的爬蟲(附註釋)
寫在前面的話:作者目前正在學習Python,還是一名小白,所以注釋可以會有些不準確的地方,望諒解。這三個小爬蟲不是很難,而且用處可能也不大,主要還是鍛煉新手對函數的運用與理解大牛和意義黨可以先繞過了
附:我用的是Pyton2.713,用3.0的朋友運行可能會有些代碼出錯

第一個,網頁原始碼爬蟲;

#-- coding: utf-8 --#一個巨詳細又簡單的小爬蟲#---------------------------------import stringfrom urllib2 import urlopen #通過from import匯入urllib2庫中的urlopen模組,用於抓取url的內容url = raw_input(‘>‘) #使用raw_input函數讓使用者輸入想要爬取的網頁,並且賦值給變數x = urlopen(‘http://‘+url) #調用urlopen擷取源碼並賦值給變數  前邊加上http://是怕使用者忘記輸入http協議print x.read() #最後使用read函數查看並使用print列印出來

用Python內建的IDLE開啟,輸入www.baidu.com ,效果;

第二個,爬取並下載百度貼吧的內容;

#-- coding: utf-8 --#爬取並下載百度貼吧的html檔案#秦王IPC#------------------------------------------------import string #調用模組from urllib2 import urlopen  #調用urllib2庫中的模組#---------------------------------#定義函數  def paqutieba(url,x,y):         for j in range(x, y+1):  #迴圈從開始頁面到終點頁面        Name = string.zfill(j,5) + ‘.html‘  #string.zfill(1,5) 檔案名稱效果00001.        print ‘正在下載第‘ + str(j) + ‘個網頁內容,並將其儲存為‘ + Name + ‘......‘  #下載的時候列印        l = open(Name,‘w+‘)  #將寫入操作賦值給變數l        k = urlopen(url + str(j)).read()   #調用urlopen模組抓取網頁內容並查看並賦值給變數k        l.write(k)  #將k內容寫入        l.close()  #關閉#---------------------------------與使用者互動---------------url = str(raw_input(u‘請輸入貼吧的地址,去掉?pn=後面的數字:\n格式:https://tieba.baidu.com/p/xxxxxxxxx?pn= \n>>>‘))  x = int(raw_input(u‘請輸入開始的頁數:\n‘))  y = int(raw_input(u‘請輸入終點的頁數:\n‘))  paqutieba(url,x,y)  #調用函數

用Python內建的IDLE開啟,隨意輸入一個貼吧地址 (有些URL沒有 ?pn= 得自己加上去),效果;

第三個,爬取內涵段子並寫入文本(這個對新手來講可能有點難理解和麻煩)

需要用到的工具:Google瀏覽器,Firefox瀏覽器,和一顆堅持下去的心。

準備工作
1.用Google開啟內涵段子官網,然後按F12進行抓包,;

初始框在右邊,可以在Dock side那裡調到下面,選擇Network,然後點All,如果左上方不是紅點,就點一下(是紅色就不用點)表示瀏覽器正對此頁面進行抓包。
再然後滑到最下面點擊載入更多;
此時查看抓到的內容,找到圖中的檔案,並且複製Request URL 的連結地址,在Firefox瀏覽器中開啟,(之所以用Firefox是因為Firefox內建轉碼,不然用Google開啟可能會是亂碼);

在Firefox瀏覽器中開啟;

然後點開可以發現,段子內容在 data>data>0>group>text路徑下;

還可以發現,不止有0,還有1,2,3,4,5....19,可以猜到這應該是頁數之類的。所以後面可以利用代碼來迴圈爬取更多的內容;

還需要突破反爬措施,其實很簡單,只需要將Request Headers下的內容複寫放進代碼裡就行了(不過要記得加‘‘和:分開來,代碼部分有);

代碼部分

‘‘‘Title = 爬取內涵段子寫入進文本coder = 秦王IPCdate = 2018-01-30因為使用while迴圈,所以需要手動停止,不然會一直寫入下去。‘‘‘import requests #網路請求模組import time #時間模組,下面要設定訪問間隔時間。如果不設定,伺服器可能會認為你是惡意攻擊,就會進行防護措施,如封IP什麼的。import sysreload(sys)sys.setdefaultencoding(‘utf-8‘)#這三行是轉碼header = {‘Host‘:‘neihanshequ.com‘,        ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0‘,        ‘Accept‘: ‘application/json, text/javascript, */*; q=0.01‘,        ‘Accept-Language‘: ‘zh-CN,en-US;q=0.7,en;q=0.3‘,        ‘Accept-Encoding‘: ‘gzip, deflate‘,        ‘Referer‘: ‘http://neihanshequ.com/‘,        ‘X-CSRFToken‘: ‘e9b62faa6a962cdf92f1531b498fc771‘,        ‘X-Requested-With‘: ‘XMLHttpRequest‘,        ‘Cookie‘: ‘csrftoken=e9b62faa6a962cdf92f1531b498fc771; tt_webid=6486401443292186126; uuid="w:c07f437659474cc1a7cfd052d9985b37"; Hm_lvt_3280fbe8d51d664ffc36594659b91638=1511848146,1512200937,1512371475,1514373568‘,        ‘Connection‘: ‘keep-alive‘,        ‘Pragma‘: ‘no-cache‘,        ‘Cache-Control‘: ‘no-cache‘}         #添加網頁的Request Headers資訊,偽裝成通過瀏覽器訪問,目的是為了突破反爬措施。timestamp = 1517361103   #設定並賦值起始時間戳記   --下面的while迴圈是利用時間戳記來判斷while type(timestamp) == int or type(timestamp) == float: #保證時間戳記不管是哪種類型的數值都能運行    url = ‘http://neihanshequ.com/joke/?is_json=1&app_name=neihanshequ_web&max_time=‘+str(timestamp) #用F12抓包然後點載入更多擷取原始連結    html = requests.get(url,headers=header)#使用get請求url內容,並賦值為html    time.sleep(3)   #設定間隔時間    for u in range(len(html.json()[‘data‘][‘data‘])):#print(len(html.json()[‘data‘][‘data‘]))判斷一頁有多少段子,放進for語句中就是有多少迴圈多少的意思        with open(r‘c:\duanzi.txt‘,‘a‘ ) as ipc: #使用with。設定寫入路徑            nr=html.json()[‘data‘][‘data‘][u][‘group‘][‘text‘] #html.json是檔案類型,方括弧裡面的是內容所在路徑            ipc.write(nr+‘\n‘) #進行寫入操作    timestamp = html.json()[‘data‘][‘max_time‘] #每當迴圈一次結束後,返回新的時間戳記進行下一次迴圈    #--------------------------可以加可不加---------------------    #print(html.status_code)#返回狀態代碼    #print(html.json()[‘data‘][‘max_time‘])#返回時間戳記

運行效果;

小白的第一篇部落格,有錯誤或是不準確的地方可以在評論區裡指出(注意用詞文明),謝謝!

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.