入門數據采集,python爬蟲常見的數據采集與保存、


本文介紹兩種方式來實現python爬蟲獲取數據,並將python獲取的數據保存到文件中。
一、第一種方式:
主要通過爬取百度官網頁面數據,將數據保存到文件baidu.html中,程序運行完打開文件baidu.html查看效果。具體代碼中有詳細的代碼解釋,相信剛入門的你也能看懂~~
說明一下我的代碼環境是python3.7,本地環境是python2.x的可能需要改部分代碼,用python3.x環境的沒問題。
代碼如下:

# -*- coding: utf-8 -*-
import urllib.request
import urllib
 
# 1網址url  --百度    
url = 'http://www.baidu.com'
 
# 2創建request請求對象
request = urllib.request.Request(url)

#3 發送請求獲取結果
response = urllib.request.urlopen(request)
htmldata = response.read()

# 4、設置編碼方式
htmldata = htmldata.decode('utf-8')
 
# 5、打印結果
print (htmldata)
 
# 6、打印爬去網頁的各類信息
print ("response的類型:",type(response))
print ("請求的url:",response.geturl())
print ("響應的信息:",response.info())
print ("狀態碼:",response.getcode())
 
# 7、爬取數據保存到文件
fileOb = open('baidu.html','w',encoding='utf-8')     #打開一個文件,沒有就新建一個
fileOb.write(htmldata)
fileOb.close()

在open()方法中如果沒有設置編碼encoding='utf-8',會報錯,原因如下:
在windows下面,新文件的默認編碼是gbk,這樣的話,python解釋器會用gbk編碼去解析我們的網絡數據流html,
然而html此時已經是decode過的unicode編碼,這樣的話就會導致解析不了,出現上述問題。
設置encoding='utf-8',打開文件時就按照utf-8格式編碼,則順利運行。
運行結果:
部分截圖如下:截取的是第六步中的網頁各類信息,第五步打印的數據過多,也已經保存到文件baidu.html中了,所以沒有截取。

 

二、第二種方式:添加特殊情景的處理器

代碼如下:

# -*- coding: utf-8 -*-
import urllib.request, http.cookiejar
 
# 1、網址url  --百度
url = 'http://www.baidu.com'
 
# 2、創建cookie容器
cj = http.cookiejar.CookieJar()
handle = urllib.request.HTTPCookieProcessor(cj)
 
# 3、創建1個opener
opener = urllib.request.build_opener(handle)

# 4、給urllib.request安裝opener
urllib.request.install_opener(opener)
 
# 5、使用帶有cookie的urllib.request訪問網頁,發送請求返回結果
response = urllib.request.urlopen(url)
htmldata = response.read()
 
# 6、設置編碼方式
data = htmldata.decode("utf-8")
 
# 7、打印結果
print (data)
 
# 8、打印爬去網頁的各類信息
print ("response的類型:",type(response))
print ("請求的url:",response.geturl())
print ("響應的信息:",response.info())
print ("狀態碼:",response.getcode())
 
# 9、爬取數據保存到文件
fileOb = open('baiduCookie.html','w',encoding='utf-8')     #打開一個文件,沒有就新建一個
fileOb.write(data)
fileOb.close() 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM