python簡易爬蟲來實現自動圖片下載

  菜鳥新人剛剛入住博客園,先發個以前寫的簡易爬蟲的實現吧,水平有限請輕噴。php

  估計利用python實現爬蟲的程序網上已經有太多了,不過新人用來練手學習python確實是個不錯的選擇。本人借鑑網上的部分實現加以改造實現網頁圖片地址提取和下載。首先找到你感興趣的網頁,以bbs論壇爲例,查看網頁的源代碼發現圖片下載的連接地址相似以下:html

<p class="imgtitle">
<a href="attachment.php?aid=48812&amp;k=176431dd98231d60e6614082ac2ce5b9&amp;t=1387945675&amp;fid=4&amp;nothumb=yes&amp;sid=4398hG%2BmnnlYG4UAc6QgsughqDa2Svrm7MIu8tShB1s%2F3QI" onmouseover="showMenu(this.id,false,2)" id="aid48812" class="bold" target="_blank">img-fa6533d1b03dee194f0636a69eea5c64.jpg</a> python

  因此找到了屬性href值就能夠解析出咱們的下載地址了(要加入當前url前綴纔是絕對地址呦)。用python寫個處理網頁的函數能夠這樣web

 1 def getImg(html,page):
 2     reg = r'attachment.php?.+" '
 3     imgre = re.compile(reg)
 4     imglist = imgre.findall(html)
 5     x = 0
 6     import os
 7     path = "d:\\picture\\"
 8     title = "%s\\" %page 
 9     new_path = os.path.join(path, title)
10     if not os.path.isdir(new_path):
11         os.makedirs(new_path)
12     
13     for imgurl in imglist:
14         imgurl=imgurl[:imgurl.find('"')]
15         imgurl=imgurl.rstrip('"')
16         print imgurl
17         imgurl="http://xxxxxx/"+imgurl
18         f = urllib2.urlopen(imgurl)
19         with open(new_path+"%s.gif" % x, "wb") as code:
20             code.write(f.read())
21             x = x + 1  

以上用的是最簡單的正則匹配,將解析後的圖片下載保存到D盤picture目錄。
 有時候論壇是要登陸的,因此處理模擬登陸這塊根據你所處理的網站會稍許不一樣,實現模擬登錄功能大部分是提交登錄表單。這裏就要用到python發送登錄表單請求消息了,利用httpfox插件獲取登錄的post信息,cookie

 1 ef login(weburl,username,password,page):
 2     cookie_support= urllib2.HTTPCookieProcessor(cookielib.CookieJar())
 3     opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
 4     urllib2.install_opener(opener)
 5     postdata=urllib.urlencode({ 
 6                            'loginfield':'username',
 7                            'formhash':gethash(weburl),    
 8                             'password':password,
 9                             'username':username,   
10                             'questionid':0, 
11                             'answer':'',
12                             'loginsubmit':'true'})
13     postdata=postdata.encode(encoding='UTF8') 
14     header = {'User-Agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)'}
15     posturl=weburl
16     req = urllib2.Request(posturl,postdata)
17     result = urllib2.urlopen(req).read()
18     Url="http://xxxxxxxxxx/viewthread.php?tid=14943&extra=page%3D1&page=" 
19     Url=Url+("%s" % page)
20     result=getHtml(Url);
21     return result
View Code

到這邊都是比較簡單實現的,稍微麻煩點的是請求表單中postdata中須要獲取隨機的hash值,所以首先要解析出你登錄界面中的那個formhash,這個用re模塊簡單解析處理一下就ok了ide

 1 def gethash(url):
 2     page = urllib2.urlopen(url)
 3     html = page.read()
 4     reg = r'name="formhash" value=".+"'
 5     hashre = re.compile(reg)
 6     hashvalue=hashre.findall(html)
 7     pos=(hashvalue[0]).index('value=')
 8     hash=(hashvalue[0])[pos+6:]
 9     print hash.strip('"')
10     return hash.strip('"')
View Code

,以上就是用到的大部分函數了,固然解析網頁還有更多的好用的模塊好比beautifulsoup等等,簡單研究一下應該就能實現一個簡易的爬蟲程序了。函數

第一次在園子寫東西,寫的比較亂,之後改進。接下來準備介紹一下如何用python實現一個RSS閱讀器。post

相關文章
相關標籤/搜索