python3使用requests包抓取並儲存網頁原始碼

Pop_Rain發表於2017-05-16

轉載自:http://blog.csdn.net/w93223010/article/details/18968081

近期的工作學習中使用到了Python,分享一些初學者的心得與君共勉。

本節的內容主要是如何使用python去獲取網頁的原始碼並儲存到本地檔案中,希望通過本節可以讓你略微瞭解到python的神奇。

先上程式碼:

import urllib.request  
def getPage(url):     
    request = urllib.request.Request(url)  
    response = urllib.request.urlopen(request)  
    return response.read().decode("utf-8") 
      
url='http://www.kntpb.com/'  
result=getPage(url)  
print (result) 

1行匯入了必要的包

第2至6\5行定義了一個函式,目的是向指定url傳送http請求,並將網頁的原始碼返回

最後把獲得的原始碼進行展示

在命令列執行程式碼的話,可以看到類似圖1-1的一堆html程式碼,即為成功。


1-1

可以用瀏覽器訪問一下程式碼中的url,可以看到類似圖1-2ebay的網站。(為了逃避中文字元的處理,所以選擇了英文的網站)

1-2

而在瀏覽的網頁的空白處單擊右鍵,選擇“檢視網頁原始碼”,可以看到類似圖1-3的的html原始碼,實際上與圖1-1中是一樣的。


1-3


修改一下程式碼,將獲取的html原始碼寫入本地的檔案。

[python] view plain copy
  1. import urllib  
  2. import urllib2  
  3. def getPage(url):     
  4.     request = urllib2.Request(url)  
  5.     response = urllib2.urlopen(request)  
  6.     return response.read()  
  7.       
  8. url='http://www.ebay.com/sch/TShirts-/15687/i.html?Style=Basic%2520Tee&_dcat=15687&Color=Black&_pgn=1'  
  9. result=getPage(url)  
  10. txt='D:\\result.html'  
  11. f = open(txt,"w+")  
  12. f.write(result)  


1012行進行了檔案操作,在D盤建立了result.html檔案並將result變數中的內容寫入其中。


作為一個購物網站,大部分型別的商品都是分很多頁的,接下來繼續修改程式碼,讓它能夠取出前5頁的內容,分別寫入5個檔案中。

[python] view plain copy
  1. import urllib  
  2. import urllib2  
  3. def getPage(url):     
  4.     request = urllib2.Request(url)  
  5.     response = urllib2.urlopen(request)  
  6.     return response.read()  
  7.       
  8. url='http://www.ebay.com/sch/TShirts-/15687/i.html?Style=Basic%2520Tee&_dcat=15687&Color=Black'  
  9. p=0  
  10. while p<5:  
  11.     print ' =='+str(p+1)+'==start=='  
  12.     result=getPage(url+'&_pgn='+str(p+1))  
  13.     txt='D:\\result'+str(p+1)+'.html'  
  14.     f = open(txt,"w+")  
  15.     f.write(result)  
  16.     print ' =='+str(p+1)+'====end=='  
  17.     p=p+1  
  18. f.close()  

8行修改了url字串的結尾部分,刪除了“&_pgn=1”,並將其作為後面迴圈的引數

1017行做了一個04的迴圈(當然你也可以設定成15),其中第11行和16行僅是跟蹤程式碼,用以顯示當前讀到的頁數。第12行的實參將迴圈變數p組合進去,達到獲取不同頁html原始碼的作用。

18行結束檔案操作,關閉所用資源。

 

程式在命令列執行後,最後一行顯示“==5====end==”,並在D盤生成如圖1-4的,檔案大小近似的5html檔案即為成功。

1-4

==========================================以下是之前的筆記=====================================

這篇文章主要介紹了Python3使用requests包抓取並儲存網頁原始碼的方法,例項分析了Python3環境下requests模組的相關使用技巧,需要的朋友可以參考下

本文例項講述了Python3使用requests包抓取並儲存網頁原始碼的方法。分享給大家供大家參考,具體如下:

使用Python 3的requests模組抓取網頁原始碼並儲存到檔案示例:

import requests
html = requests.get("http://www.baidu.com")
with open('test.txt','w',encoding='utf-8') as f:
 f.write(html.text)

這是一個基本的檔案儲存操作,但這裡有幾個值得注意的問題:

1.安裝requests包,命令列輸入pip install requests即可自動安裝。很多人推薦使用requests,自帶的urllib.request也可以抓取網頁原始碼

2.open方法encoding引數設為utf-8,否則儲存的檔案會出現亂碼。

3.如果直接在cmd中輸出抓取的內容,會提示各種編碼錯誤,所以儲存到檔案檢視。

4.with open方法是更好的寫法,可以自動操作完畢後釋放資源。

另一個例子:

import requests
ff = open('testt.txt','w',encoding='utf-8')
with open('test.txt',encoding="utf-8") as f:
 for line in f:
 ff.write(line)
ff.close()

這是演示讀取一個txt檔案,每次讀取一行,並儲存到另一個txt檔案中的示例。

因為在命令列中列印每次讀取一行的資料,中文會出現編碼錯誤,所以每次讀取一行並儲存到另一個檔案,這樣來測試讀取是否正常。(注意open的時候制定encoding編碼方式)

轉自:小談部落格 http://www.tantengvip.com/2015/05/requests-html/

相關文章