一:抓取簡單的頁面:html
用Python來作爬蟲抓取網站這個功能很強大,今天試着抓取了一下百度的首頁,很成功,來看一下步驟吧前端
首先須要準備工具:python
1.python:本身比較喜歡用新的東西,因此用的是Python3.6,python下載地址:https://www.python.org/web
2.開發工具:用Python的編譯器便可(小巧),不過本身因爲以前一直作得前端,使用的webstrom,因此選擇JetBrains 公司的PyCharm,下載地址:https://www.jetbrains.com/zh/pycharm/specials/pycharm/pycharm.html?utm_source=baidu&utm_medium=cpc&utm_campaign=cn-bai-pro-pycharm-ex-pc&utm_content=pycharm-download&utm_term=pycharm%E4%B8%8B%E8%BD%BD瀏覽器
3.Fiddler -- 網頁請求監控工具,咱們可使用它來了解用戶觸發網頁請求後發生的詳細步驟;(自行百度下載)函數
Python2系列使用的是urllib2,Python3後將其所有整合爲urllib,工具
在2中:開發工具
urllib2.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None) urllib2.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
3中是網站
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None) urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None) #這個函數看起來接受不少的參數啊,不過不少咱們平時不會用到,用到的url居多。
很明顯,我用後者url
簡單爬蟲代碼
#encoding:UTF-8
import urllib.request
url = "https://www.douban.com/ "
data = urllib.request.urlopen(url).read()
data = data.decode('UTF-8')
print(data)
效果以下:
二:抓取須要假裝瀏覽器的網站
可是一個小小的百度首頁怎能知足我,因而我又想到了一些須要須要假裝瀏覽器才能抓取的網站,好比豆瓣,
1.假裝瀏覽器:
對於一些須要登陸的網站,若是不是從瀏覽器發出的請求,則得不到響應。因此,咱們須要將爬蟲程序發出的請求假裝成瀏覽器正規軍。
具體實現:自定義網頁請求報頭。
打開工具Fiddler,而後再瀏覽器訪問「https://www.douban.com/」,在Fiddler左側訪問記錄中,找到「200 HTTPS www.douban.com」這一條,點擊查看其對應的請求和響應報頭具體內容:
3.進行訪問:
import urllib.request
import ssl
ssl._create_default_https_context = ssl._create_stdlib_context
# 定義保存函數
def saveFile(data):
path = "F:\\pachong\\02_douban.out"
f = open(path, 'wb')
f.write(data)
f.close()
# 網址
url = "https://www.douban.com/"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/51.0.2704.63 Safari/537.36'}
req = urllib.request.Request(url=url, headers=headers)
res = urllib.request.urlopen(req)
data = res.read()
# 也能夠把爬取的內容保存到文件中
saveFile(data)
data = data.decode('utf-8')
# 打印抓取的內容
print(data)
# 打印爬取網頁的各種信息
print(type(res))
print(res.geturl())
print(res.info())
print(res.getcode())
咱們來看這段代碼:
import ssl
ssl._create_default_https_context = ssl._create_stdlib_context
這句是爲了能獲取到https而插入的代碼,沒他無法獲取https
輸出結果: