#urllib的爬蟲案例-經過最原始的爬蟲方式 爬蟲以前若是抓包工具Fiddler證書安裝失敗,採用如下方法html
一、打開cmd 二、進入fillder的目錄 以下: 裏面的路徑改爲你本身的安裝路徑web
cd /d "D:\Program Files (x86)\Fiddler2" 複製代碼
而後再執行下面命令json
makecert.exe -r -ss my -n "CN=DO_NOT_TRUST_FiddlerRoot, O=DO_NOT_TRUST, OU=Created by http://www.fiddler2.com" -sky signature -eku 1.3.6.1.5.5.7.3.1 -h 1 -cy authority -a sha1 -m 120 -b 09/05/2012 複製代碼
下面提共一個批處理,打開你的fiddler2的目錄把下面代碼保存成一個creat.bat文件直接雙擊運行安全
cd %cd% makecert.exe -r -ss my -n "CN=DO_NOT_TRUST_FiddlerRoot, >O=DO_NOT_TRUST, OU=Created by http://www.fiddler2.com" -sky >signature -eku 1.3.6.1.5.5.7.3.1 -h 1 -cy authority -a sha1 -m 120 -b >09/05/2012 pause 複製代碼
代碼操做(一)爬取百度貼吧數據(GET方式爬取數據 ,這裏爬取的是戰狼2貼吧的html)bash
# -*- coding:utf-8 -*-
#引入須要的模塊
import urllib #用於進行中文編碼
import urllib2 #用於進行爬蟲核心處理
#定義一個函數,用於爬取對應的數據
def load_url(url,file_name):
''' 做用:針對指定的url地址,進行數據的獲取 :param url: 要爬取數據的具體url地址 :param file_name: 要保存的文件名稱;在當前函數中,只作提示使用 :return: 爬取的數據 '''
print('開始爬取%s的內容'%file_name)
#爬取程序
my_headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36',
}
request = urllib2.Request(url,headers=my_headers)
content = urllib2.urlopen(request).read()
print('爬取%s的內容完成!'%file_name)
return content
#定義一個函數,用於保存數據
def save_data(data,file_name):
''' 做用:主要用於進行數據存儲 :param data: 要存儲的數據 :param file_name: 要存儲的文件名稱 :return: 無 '''
print('開始保存%s的內容'%file_name)
with open(file_name,'w') as f:
f.write(data)
print('保存%s的內容完成!'%file_name)
#定義函數,進行爬蟲的核心處理功能
def spider(url,kw,begin,end):
''' 用於進行核心爬蟲功能的調度 :param url: 要爬取的地址 :param kw: 貼吧名稱 :param begin: 起始頁碼 :param end: 結束頁碼 :return: 無 '''
for page in range(begin,end+1):
#計算須要的頁碼
pn = (page-1)*50
#進行kw參數的編碼
kw = urllib.urlencode({'kw':kw})
#拼接url地址
full_url = url + kw +'&pn=' +str(pn)
#定義一個保存文件的名稱
file_name = '網頁'+str(page) +'.html'
#開始爬取數據
html=load_url(full_url,file_name)
#保存數據到文件
save_data(html,file_name)
#主程序運行入口
if __name__ == '__main__':
#用戶輸入相關數據
url='http://tieba.baidu.com/f?'
kw = raw_input('請輸入要爬取的貼吧名稱:')
begin = int(raw_input('請輸入開始頁碼:'))
end = int(raw_input('請輸入結束頁碼:'))
#調用爬蟲開始執行
spider(url,kw,begin,end)
複製代碼
代碼操做(二)爬取百度清純妹子圖(GET方式爬取Ajax數據)服務器
# -*- coding:utf-8 -*-
import urllib
import urllib2
url = 'http://image.baidu.com/search//acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E9%9D%92%E6%98%A5%E5%A6%B9%E5%AD%90%E5%9B%BE&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&word=%E9%9D%92%E6%98%A5%E5%A6%B9%E5%AD%90%E5%9B%BE&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=&fr=&pn=30&rn=30&gsm=1e&1502192101260='
#請求頭描述信息
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36',
}
#包裝請求對象
request = urllib2.Request(url,headers=header)
#根據請求對象發送數據請求,獲取服務器返回的響應對象
response = urllib2.urlopen(request)
#獲取響應對象中的數據
content = response.read()
#將獲取的數據保存在文件中
with open('qing.json','w') as f:
f.write(content)
複製代碼
代碼操做(三)爬取豆瓣電影數據(POST方式爬取Ajax數據)cookie
# -*- coding:utf-8
import urllib
import urllib2
url = 'https://movie.douban.com/j/new_search_subjects?sort=T&range=0,10'
#要傳遞的post方式嗯對數據,有可能會有多組數據
submit_data = {
'start':20,
'tags':'喜劇'
}
#編碼
data = urllib.urlencode(submit_data)
#構造請求頭,建立請求對象
headers = {
"Accept" : "application/json, text/plain, */*",
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.7 Safari/537.36",
"Accept-Language" : "zh-CN,zh;q=0.8"
}
request = urllib2.Request(url,data,headers)
#發送請求,獲取服務器響應數據
response = urllib2.urlopen(request)
#獲取爬取到的數據
content = response.read()
#保存數據
with open('movies.json','w') as f:
f.write(content)
複製代碼
代碼操做(四)爬取qq空間數據(驗證登陸,在建立請求對象時,需加入cookie)網絡
# -*- coding:utf-8 -*-
#引入須要的模塊
import urllib
import urllib2
url = 'https://user.qzone.qq.com/695282462/infocenter'
my_header = {
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.7 Safari/537.36",
"Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp, image/apng,*/*;q=0.8",
"Accept-Language" : "zh-CN,zh;q=0.8",
'Cookie':'ptisp=ctc; RK=WY0mdGAKSq; ptcz=ed3988f5c1d469e118b8b58fd5afcda9770e51b2ed 2891a36c3445bd76a9efe7; pt2gguin=o0(QQ號碼); uin=o0(QQ號碼); skey=@ctrB6l4vj'
}
request = urllib2.Request(url,headers=my_header)
response = urllib2.urlopen(request)
html = response.read()
with open('qzone.html','w') as f:
f.write(html)
複製代碼