第一只python小爬虫
前言:
互聯網就像一張無形的蜘蛛網,網站就相當于在這張網的交叉結點。而網絡爬蟲就是這張網上的蜘蛛,它是一種程序,能夠利用url鏈接在各網站之間自動穿梭并抓取所需數據。
學了python的正則表達式之后,我便迫不及待的想要找個應用玩一下,而網絡爬蟲就是個不二的選擇。下面記錄一下我寫的第一只小爬蟲,用來自動下載網頁上的圖片。
(操作環境:32位Win8系統,運行工具:python2.7.9+Eclipse.)
正文:
1、首先,每個網站都有一個URL地址,通過這個URL可以進入各個相應的網站。我們在瀏覽網頁 點擊進入其他網頁的時候,其實就是打開其他網頁的跳轉鏈接URL。我們所看到的每個網頁“背后”都有著很多其他網頁的跳轉鏈接,我們只需鼠標右鍵打開網頁源代碼即可查看到。
2、首先,我們用到的是python的urllib模塊。其中有幾個方法是比較重要的:
url.urlopen(url,data=None,proxies=None,context=None) ?根據URL打開網頁,返回一個句柄
url.urlopen()的對象有個方法:read() ?用于讀取網頁源代碼
url.urlretrieve(url,filename=None,reporthook=None,data=None,context=None) ?用于從網頁上下載數據到本地
我們首先用urlopen()打開一個網頁,獲得一個句柄;然后用句柄.read()獲取網頁源代碼;再用正則表達式從網頁源代碼中找出各個圖片的URL;最后用urlretrieve(URL,'XXX.jpg')下載圖片。
代碼如下:
import re import urllibdef getHtml(url):page = urllib.urlopen(url)html1 = page.read()return html1def getImg(html1):reg = 'src="(http://img.{,110}?\.jpg)"'imglist = re.findall(reg,html1)urllib.urlretrieve(imglist[1],'1.jpg')str2 = raw_input('Please input URL:') html1 = getHtml(str2) getImg(html1) print 'Finish!' 示例網頁:http://mm.taobao.com/689744369.htm
以上代碼只下載了一張圖片,但網頁上所有圖片的URL都已經找到 放在imglist里面,我們只要加上個循環就可以下載全部圖片了。
代碼很簡單,主要是要獲取到圖片的URL。而圖片URL的獲取 是從網頁源代碼上用正則表達式匹配出來的。
每一個網頁對應的源代碼格式都會有點差異,所以我們從不同網頁上下載圖片,最重要的就是查看網頁源代碼,分析圖片URL的位置,然后編寫恰當的正則表達式把圖片URL拿下來。
分享兩個視頻教程,一個是智普教育的淘女郎圖片爬蟲(http://pan.baidu.com/s/1ntj2AX7),另一個是中谷教育的小爬蟲教學視頻(http://pan.baidu.com/s/1nt63lR7)
我最初看的是中谷教學視頻,初識網絡小爬蟲。后來看到智普的視頻,最大的收獲就是不小心知道了淘女郎的網址(http://mm.taobao.com/689744369.htm)里面一大片MM的照片,正愁沒個好網址來練手呢。然后智普在獲取圖片URL的時候用的是切片,這也是一種方法,但相對于正則表達式而言就顯得太繁雜了。
總結:
感覺這個小爬蟲挺好玩的,就是現在下載來的圖片沒什么用,下完了看兩眼就都刪了。在知乎、博客里面搜了python爬蟲的相關資料,其實我這個小爬蟲也太小了,根本微不足道,只是下載幾張圖片而已。爬蟲的真正應用是在搜索引擎和爬一些供數據挖掘的源數據,稍微大只一點的爬蟲應該是運行在分布式機器上的,而且能夠熟練、有效地在各個網頁中穿梭、抓取數據。任重道遠,繼續努力!
以下是我抓取整一個頁面10個淘女郎的圖片(將近兩千張),首先獲取10個淘女郎的主頁鏈接,進入各個淘女郎的主頁,然后再獲取圖片的URL進行下載:
import re import urllib global a a = 1def getHtml(url):page = urllib.urlopen(url)html1 = page.read()return html1def getImg(html1):global areg = 'src="(http://img.{,110}?\.jpg)"'imgre = re.compile(reg)imglist = imgre.findall(html1)for imgurl in imglist:urllib.urlretrieve(imgurl,'%d.jpg'%a)print a,imgurla += 1strMain = raw_input('Please input URL:') htmlMain = getHtml(strMain) regMain = 'a href="(http://mm.taobao.com/\d+?\.htm)' urlSon = re.compile(regMain) htmlList = urlSon.findall(htmlMain) for html in htmlList:html0 = getHtml(html)getImg(html0)print 'Finish!'示例網頁:http://mm.taobao.com/json/request_top_list.htm?type=0&page=8
轉載請注明出處,謝謝!(原文鏈接:http://blog.csdn.net/bone_ace/article/details/44598527)
總結
以上是生活随笔為你收集整理的第一只python小爬虫的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 凶残的挖矿脚本,奴役我数千机器!
- 下一篇: 青蛙的眼睛