Python網絡爬蟲(二) urllib爬蟲案例

###目錄:

#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和POST數據傳送的卻別在於GET方式是直接以連接形式訪問,連接中包含了全部的參數,同時也包含了本身密碼,包含了密碼的話是一種不安全的選擇,不過優勢在於能夠直觀地看到本身提交了什麼內容。POST則不會在網址上顯示全部的參數。

代碼操做(一)爬取百度貼吧數據(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)
複製代碼

獲得兩個文件,分別是戰狼2貼吧首頁和第二頁的html代碼

代碼操做(二)爬取百度清純妹子圖(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)
複製代碼

爬取到我的空間當前顯示內容的html代碼
相關文章
相關標籤/搜索