學習了python的基礎知識后,我們來寫一個簡單的爬蟲案例,本案例用到了urllib和re庫。
本案例的爬蟲原理:
首先我們用urllib庫來模擬瀏覽器訪問網站的行為,由給定的網站鏈接(url)得到對應網頁的源代碼(html標簽)。其中,源代碼以字符串的形式返回。
然后我們用正則表達式re庫在字符串(網頁源代碼)中匹配表示圖片鏈接的小字符串,返回一個列表。最后循環列表,根據圖片鏈接將圖片保存到本地。
其中urllib庫的使用在python2.x和python3.x中的差別很大,本案例以python3.x為例
直接上代碼:
''' 第一個簡單的爬蟲程序,使用python3.x和urllib與re庫'''import urllib.requestimport redef getHtmlCode(url): # 該方法傳入url,返回url的html的源碼 headers = { 'User-Agent': 'Mozilla/5.0 (linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36' } url1 = urllib.request.Request(url, headers=headers) # Request函數將url添加頭部,模擬瀏覽器訪問 page = urllib.request.urlopen(url1).read() # 將url頁面的源代碼保存成字符串 page = page.decode('UTF-8') # 字符串轉碼 return pagedef getImg(page): # 該方法傳入html的源碼,經過截取其中的img標簽,將圖片保存到本機 # findall(正則,代表頁面源碼的str)函數,在字符串中按照正則表達式截取其中的小字符串 # findall()返回一個列表,列表中的元素是一個個的元組,元組的第一個元素是圖片的url,第二個元素是url的后綴名 # 列表形如:[('http://www.zhangzishi.cc/732x120.gif', 'gif'), ('http://ww2.sinaimg.cn/qomyo.jpg', 'jpg') imgList = re.findall(r'(http:[^/s]*?(jpg|png|gif))"',page) x = 0 for imgUrl in imgList: # 列表循環 上述代碼在找圖片的url時,我們用的是re(正則表達式)。re用得好的話會有奇效,用的不好,效果極差。既然我們得到了網頁的源代碼,我們何不根據標簽的名稱來得到其中的內容。
接下來要介紹的BeautifulSoupl庫就能根據標簽的名稱來得到標簽的內容。請參見本人博客:點我進入博客
新聞熱點
疑難解答