生活随笔
收集整理的這篇文章主要介紹了
python3爬虫入门(urllib和requests简单使用)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
爬蟲介紹
- 知道python有強大的的爬蟲庫,但是對于我們普通小白來說,寫一個完整的爬蟲需要知道什么甚至了解什么都是很重要的。掌握了這些基本點,才能夠熟悉爬蟲的構成和獲取有用的信息。
編寫一個小爬蟲個人感覺可以分為三個階段:
- 1:請求,這個就是使用urlib2或者requests發送http請求。要掌握期中一些用法以及一些常用的請求方式。
- 2:解析,當得到一個網頁的html,我們要用一些工具解析文件,獲得我們需要的信息。常見是beautifulsoup解析大部分加部分正則。
- 3:存儲:將信息寫入mysql或本地。(mysql,file文件傳輸讀寫)
當然,面對更大的爬蟲,可能有更多的步驟,比如函數建模,去重,等等。
本文主要記錄在學習請求部分的過程!
urllib板塊:
python內置urllib版塊,支持header,cookie,ip代理池等操作,但是比較麻煩的就是每次都要處理編碼解碼問題,搞得有點繁瑣。
- urllib2 在 python3.x 中被改為urllib.request,一般為了使用習慣,導入時命名為urllib2:import urllib.request as urllib2。
get請求
一個基本的百度請求的代碼如下:
import urllib
.request
as urllib2
header
={"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"}
request
= urllib2
.Request
('http://www.baidu.com',headers
=header
)
response
= urllib2
.urlopen
(request
)
buff
= response
.read
()
html
= buff
.decode
()
print(html
)
對于有url拼湊的地址:例如有
- 這樣就要添加data信息(或者你直接拼湊url)
比如我要請求這個頁面,就要在data字典組添加對應的查詢頭信息,并且還需要url編碼轉換成瀏覽器能夠標識的字串。
編碼工作使用urllib.parse的urlencode()函數,幫我們將key:value這樣的鍵值對轉換成"key=value"這樣的字符串,解碼工作可以使用urllib的unquote()函數。(注意,不是urllib.urlencode())
代碼為:
import urllib
.request
as urllib2
import urllib
.parse
url
= "http://tieba.baidu.com/f"headers
={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0"}formdata
= {"ie":"utf-8","kw":"江蘇科技大學","fr":"search"
}
data
= urllib
.parse
.urlencode
(formdata
)
newurl
=url
'?' data
print(data
)
request
= urllib2
.Request
(newurl
, headers
= headers
)
response
= urllib2
.urlopen
(request
)
html
=response
.read
().decode
("utf-8")
print( html
)
可以看到,這樣已經請求成功了呢。
post請求:post請求和get請求的不同之處在于傳遞參數的方式,get通過url拼湊進行不同的請求,而post請求則是將data放進請求列中進行模擬類似表單的請求。
import urllib
.request
as urllib2
import urllib
.parse
url
= "http://tieba.baidu.com/f"headers
={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0"}formdata
= {"ie":"utf-8","kw":"江蘇科技大學","fr":"search"
}
data
= urllib
.parse
.urlencode
(formdata
).encode
('utf-8')
print(data
)
request
= urllib2
.Request
(url
, data
= data
, headers
= headers
)
response
= urllib2
.urlopen
(request
)
html
=response
.read
().decode
("utf-8")
print( html
)
這大概就是常用的urllib的使用方式了,期中感覺請求步驟和編碼問題都比較麻煩。requests很好的解決了這個問題。
requests(如果沒有安裝在teminal控制臺pip install requests即可)
對于requests的一個最基本的請求流程為
import requests
url
= "https://www.neihan8.com/article/list_5_" "1" ".html"
userangert
= 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
header
= {'User-Agent': userangert
}
req
= requests
.get
(url
, headers
=header
)
req
.encoding
='gbk'
print(req
.text
)
注意如果輸出亂碼要注意解決。同樣,如果是post請求,直接request.post即可,同時requests是從urllib編寫而來,支持urllib的絕大部分操作。比如cookie管理,ip代理等等。
- 作為爬蟲,經常會通過抓包找到數據源的json文件,如果是直接返回response.json()。
下面通過代碼給出區別:
import requests
formdata
= {"type":"AUTO","i":"i love python","doctype":"json","xmlVersion":"1.8","keyfrom":"fanyi.web","ue":"UTF-8","action":"FY_BY_ENTER","typoResult":"true"
}
url
= "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"headers
={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}response
= requests
.post
(url
, data
= formdata
, headers
= headers
)print (response
.text
)
print (response
.json
())
輸出為:
至于這個請求錯誤,原因是我的請求頭不夠完善,模擬不夠好,可以通過抓包近似完全模擬請求。有興趣的可以試試。
寫的并不是很好,本人也是初學者,希望可以一起交流經驗。總的來說requests效率更高更便捷,還是推薦使用requests!
如果對后端、爬蟲等感性趣歡迎關注我的個人公眾號交流:bigsai
總結
以上是生活随笔為你收集整理的python3爬虫入门(urllib和requests简单使用)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。