Python網路爬蟲(二)- urllib爬蟲案例
目錄:
- Python網路爬蟲(一)- 入門基礎
- Python網路爬蟲(二)- urllib爬蟲案例
- Python網路爬蟲(三)- 爬蟲進階
- Python網路爬蟲(四)- XPath
- Python網路爬蟲(五)- Requests和Beautiful Soup
- Python網路爬蟲(六)- Scrapy框架
- Python網路爬蟲(七)- 深度爬蟲CrawlSpider
- Python網路爬蟲(八) - 利用有道詞典實現一個簡單翻譯程序
urllib的爬蟲案例-通過最原始的爬蟲方式
爬蟲之前如果抓包工具Fiddler證書安裝失敗,採用以下方法
1、打開cmd
2、進入fillder的目錄
如下:裡面的路徑改成你自己的安裝路徑cd /d "D:Program Files (x86)Fiddler2"
然後再執行下面命令n
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文件直接雙擊運行n
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)# -*- coding:utf-8 -*-nn#引入需要的模塊nimport urllib #用於進行中文編碼nimport urllib2 #用於進行爬蟲核心處理nn#定義一個函數,用於爬取對應的數據ndef load_url(url,file_name):n n 作用:針對指定的url地址,進行數據的獲取n :param url: 要爬取數據的具體url地址n :param file_name: 要保存的文件名稱;在當前函數中,只做提示使用n :return: 爬取的數據n n print(開始爬取%s的內容%file_name)n #爬取程序n my_headers={n User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36,n }n request = urllib2.Request(url,headers=my_headers)n content = urllib2.urlopen(request).read()n print(爬取%s的內容完成!%file_name)n return contentnn#定義一個函數,用於保存數據ndef save_data(data,file_name):n n 作用:主要用於進行數據存儲n :param data: 要存儲的數據n :param file_name: 要存儲的文件名稱n :return: 無n n print(開始保存%s的內容%file_name)nn with open(file_name,w) as f:n f.write(data)n print(保存%s的內容完成!%file_name)nnn#定義函數,進行爬蟲的核心處理功能ndef spider(url,kw,begin,end):n n 用於進行核心爬蟲功能的調度n :param url: 要爬取的地址n :param kw: 貼吧名稱n :param begin: 起始頁碼n :param end: 結束頁碼n :return: 無n n for page in range(begin,end+1):n #計算需要的頁碼n pn = (page-1)*50n #進行kw參數的編碼n kw = urllib.urlencode({kw:kw})n #拼接url地址n full_url = url + kw +&pn= +str(pn)n #定義一個保存文件的名稱n file_name = 網頁+str(page) +.htmln #開始爬取數據n html=load_url(full_url,file_name)n #保存數據到文件n save_data(html,file_name)nn#主程序運行入口nif __name__ == __main__:n #用戶輸入相關數據n url=http://tieba.baidu.com/f?n kw = raw_input(請輸入要爬取的貼吧名稱:)n begin = int(raw_input(請輸入開始頁碼:))n end = int(raw_input(請輸入結束頁碼:))nn #調用爬蟲開始執行n spider(url,kw,begin,end)n
得到兩個文件,分別是戰狼2貼吧首頁和第二頁的html代碼
代碼操作(二)爬取百度清純妹子圖(GET方式爬取Ajax數據)
# -*- coding:utf-8 -*-nimport urllibnimport urllib2nnurl = 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=n#請求頭描述信息nheader = {nUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36,n}nn#包裝請求對象nrequest = urllib2.Request(url,headers=header)nn#根據請求對象發送數據請求,獲取伺服器返回的響應對象nresponse = urllib2.urlopen(request)nn#獲取響應對象中的數據ncontent = response.read()nn#將獲取的數據保存在文件中nwith open(qing.json,w) as f:n f.write(content)n
爬取的圖片鏈接
代碼操作(三)爬取豆瓣電影數據(POST方式爬取Ajax數據)
# -*- coding:utf-8nnimport urllibnimport urllib2nnurl = https://movie.douban.com/j/new_search_subjects?sort=T&range=0,10nn#要傳遞的post方式嗯對數據,有可能會有多組數據nsubmit_data = {n start:20,n tags:喜劇n}n#編碼ndata = urllib.urlencode(submit_data)nn#構造請求頭,創建請求對象nheaders = {n "Accept" : "application/json, text/plain, */*",n "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",n "Accept-Language" : "zh-CN,zh;q=0.8"n}nnrequest = urllib2.Request(url,data,headers)nn#發送請求,獲取伺服器響應數據nresponse = urllib2.urlopen(request)nn#獲取爬取到的數據ncontent = response.read()nn#保存數據nwith open(movies.json,w) as f:n f.write(content)n
代碼操作(四)爬取qq空間數據(驗證登錄,在創建請求對象時,需加入cookie)
# -*- coding:utf-8 -*-nn#引入需要的模塊nimport urllibnimport urllib2nnurl = https://user.qzone.qq.com/695282462/infocenternnmy_header = {n "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)n Chrome/60.0.3112.7 Safari/537.36",n "Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,nimage/apng,*/*;q=0.8",n "Accept-Language" : "zh-CN,zh;q=0.8",n Cookie:ptisp=ctc; RK=WY0mdGAKSq; ptcz=ed3988f5c1d469e118b8b58fd5afcda9770e51b2edn2891a36c3445bd76a9efe7; pt2gguin=o0(QQ號碼); uin=o0(QQ號碼); skey=@ctrB6l4vjn}nnrequest = urllib2.Request(url,headers=my_header)nnresponse = urllib2.urlopen(request)nnhtml = response.read()nnwith open(qzone.html,w) as f:n f.write(html)n
爬取到個人空間當前顯示內容的html代碼
作者:_知幾 Python愛好者社區專欄作者,請勿轉載,謝謝。
簡書主頁:http://www.jianshu.com/u/9dad6621d2a0博客專欄:_知幾的博客專欄 配套視頻教程:Python3爬蟲三大案例實戰分享:貓眼電影、今日頭條街拍美圖、淘寶美食 Python3爬蟲三大案例實戰分享 公眾號:Python愛好者社區(微信ID:python_shequ),關注,查看更多連載內容。
推薦閱讀:
※python高級特性
※Python面向對象編程(OOP)
※PyQt5系列教程(11):今天的消息挺全哦!
※如何系統的自學Python?
※給妹子講python--01好用的列表