當前位置:首頁 » 編程語言 » python34urllib2

python34urllib2

發布時間: 2025-07-11 18:15:33

1. 如何用python爬蟲獲取那些價值博文

過程大體分為以下幾步:

  • 1. 找到爬取的目標網址;

  • 2. 分析網頁,找到自已想要保存的信息,這里我們主要保存是博客的文章內容;

  • 3. 清洗整理爬取下來的信息,保存在本地磁碟。

  • 打開csdn的網頁,作為一個示例,我們隨機打開一個網頁:

    http://blog.csdn.net/u013088062/article/list/1。

    可以看到,博主對《C++卷積神經網路》和其它有關機計算機方面的文章都寫得不錯。

    1#-*-coding:UTF-8-*-
    2importre
    3importurllib2
    4importsys
    5#目的:讀取博客文章,記錄標題,用Htnl格式保存存文章內容
    6#版本:python2.7.13
    7#功能:讀取網頁內容
    8classGetHtmlPage():
    9#注意大小寫
    10def__init__(self,strPage):
    11self.strPapge=strPage
    12#獲取網頁
    13defGetPage(self):
    14req=urllib2.Request(self.strPapge)#建立頁面請求
    15rep=req.add_header("User-Agent","Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/38.0.2125.122Safari/537.36SE2.XMetaSr1.0")
    16try:
    17cn=urllib2.urlopen(req)#網頁請求
    18page=cn.read()#讀網頁
    19uPage=page.decode("utf-8")#網頁編碼
    20cn.close()
    21returnuPage
    22excepturllib2.URLError,e:#捕獲異常
    23print'URLError:',e.code
    24return
    25excepturllib2.HTTPError,e:#捕獲異常
    26print'HTTPError:'+e.reason
    27return
    28returnrePage
    29#正則表達式,獲取想要的內容
    30classRePage():
    31#正則表達式提取內容,返回鏈表
    32defGetReText(self,page,recode):
    33rePage=re.findall(recode,page,re.S)
    34returnrePage
    35#保存文本
    36classSaveText():
    37defSave(self,text,tilte):
    38try:
    39t="blog\"+tilte+".html"
    40f=file(t,"a")
    41f.write(text)
    42f.close()
    43exceptIOError,e:
    44printe.message
    45if__name__=="__main__":
    46s=SaveText()
    47#文件編碼
    48#字元正確解碼
    49reload(sys)
    50sys.setdefaultencoding("utf-8")#獲得系統的默認編碼
    51#獲取網頁
    52page=GetHtmlPage("http://blog.csdn.net/u013088062/article/list/1")
    53htmlPage=page.GetPage()
    54#提取內容
    55reServer=RePage()
    56reBlog=reServer.GetReText(htmlPage,r'.*?(s.+?)')#獲取網址鏈接和標題
    57#再向下獲取正文
    58forrefinreBlog:
    59pageHeard="http://blog.csdn.net/"#加鏈接頭
    60strPage=pageHeard+ref[0]
    61tilte=ref[1].replace('[置頂]',"")#用替換的功能去除雜的英文
    62tilte=tilte.replace(" ","").lstrip().rstrip()
    63#獲取正文
    64htmlPage=GetHtmlPage(strPage)
    65htmlPageData=htmlPage.GetPage()
    66reBlogText=reServer.GetReText(htmlPageData,'(.+?)')
    67#保存文件
    68fors1inreBlogText:
    69s1=' '+s1
    70s.Save(s1,tilte)

2. python 的 re模塊中如何使用變數代替要匹配的字元串

這么試試:
XH=raw_input("請輸入你的手機型號:")
XH_re=re.compile(XH+'.*?¥(d{1,4})</em>',re.DOTALL)

3. python怎麼做介面測試工具

之前使用過urllib和urllib2做介面測試,在做的途中,感覺使用urllib2直接進行的get,post 請求並沒有那麼好用。作為測試人員,所需要的測試工具應當以方便為第一要務,測試的耗時只要是真正的無人值守,耗時不是太久的都可以接受。所以,本人又嘗試了一個新的包:requests。

Requests 是用Python語言編寫,基於 urllib,採用 Apache2 Licensed 開源協議的 HTTP 庫。它比 urllib 更加方便,可以節約我們大量的工作,完全滿足 HTTP 測試需求。Requests 的哲學是以 PEP 20 的習語為中心開發的,所以它比 urllib 更加 Pythoner。更重要的一點是它支持 Python3 !推薦一篇文章,上面有該包的詳細說明傳送門,以下只會寫到我用到的部分,所以更多的了解需要自己去搜資料

好了,我們開始吧!!

介面測試中重要的部分:

1.get和post方法

2.用到的參數

3.請求頭

4.cookie

5.日誌輸出

6.如何調試你的程序--藉助fiddler

按照以上的順序,我將一一說明我的搞法,因為編碼能力有限,所以可能看著很low

一、get和post

requests包很好的實現了post和get方法,示例:

1 import requests2 response_get = requests.get(url, data, headers, cookies)3 response_post = requests.post(url, data, headers, cookies)

其他的訪問方式如put,head等等,用法幾乎都是如此,因為沒用到,所以省略

現在一般的介面返回值有頁面和json倆種,按照需求,可以分別使用response.text或者response.content獲取,text獲取的是unicode類型的返回值,而content返回值是str類型,所以我一般使用content來獲取返回值,因為這樣獲取的返回值可以直接使用正則或者in的方式來驗證返回值結果是否正確。

我自己為了實現介面的自動訪問,所以又在requests上面加了一層封裝,就像下面這樣:

三、cookie

一款產品的介面測試中必定會使用登錄狀態,需要使用cookie實現,之前寫過使用cookiejar獲取cookie,requests中獲取cookie的方法更為簡單,不過首先你得知道是哪個介面set了cookie,不過一般是登錄啦。登錄介面訪問之後set了cookie,那好,就去調用登錄介面,然後拿到搞回來的cookie:

# 只需要這樣!!login = requests.post(login_url, data=login_data, headers=login_header)
cookie = login.cookies

這個cookie就是登錄狀態了,拿著隨便用,需要登錄的就直接cookies=cookies

四、日誌輸出

這里注意看第二步中介面數據,有介面描述,也有介面是啥,第一步中又把content做成返回值了,具體拼接方式自己想吧,東西全有了,想寫啥寫啥,還可以加上獲取本地時間的api獲取介面運行時間,log文件該長啥樣是門學問,這里就不獻丑了。

五、借用fiddler調試你的腳本

requests允許使用代理訪問,這有啥用,真有!fiddler是一款截包改包的工具,而且通過擴展可以進行請求間的比對,這樣讓你的程序訪問的請求和真正正確的請求作對比,為啥我的程序訪問出錯?是不是缺了請求頭?參數是不是丟了?cookie是不是少了?很容易看出來。寫法如下:

proxies = { "http": "http://127.0.0.1:8888", "https": "http://127.0.0.1:8888"}
requests.post(url, proxies=proxies)

這樣就可以走代理了,除fiddler以外還有charles和burp suite可以使用,具體看個人喜好吧。

熱點內容
紅點角標演算法 發布:2025-07-12 12:11:16 瀏覽:843
開心消消樂伺服器繁忙什麼情況 發布:2025-07-12 12:11:14 瀏覽:238
資料庫的封鎖協議 發布:2025-07-12 12:10:35 瀏覽:724
如何配置一台長久耐用的電腦 發布:2025-07-12 11:43:03 瀏覽:601
昆明桃源碼頭 發布:2025-07-12 11:38:45 瀏覽:568
大司馬腳本掛機 發布:2025-07-12 11:38:35 瀏覽:458
資料庫實時監控 發布:2025-07-12 11:31:33 瀏覽:743
vb6反編譯精靈 發布:2025-07-12 11:23:12 瀏覽:997
模擬存儲示波器 發布:2025-07-12 11:10:58 瀏覽:814
怎麼查看安卓真實運行內存 發布:2025-07-12 11:08:39 瀏覽:883