學(xué)習(xí)了python的基礎(chǔ)知識(shí)后,我們來寫一個(gè)簡(jiǎn)單的爬蟲案例,本案例用到了urllib和re庫(kù)。
本案例的爬蟲原理:
首先我們用urllib庫(kù)來模擬瀏覽器訪問網(wǎng)站的行為,由給定的網(wǎng)站鏈接(url)得到對(duì)應(yīng)網(wǎng)頁(yè)的源代碼(html標(biāo)簽)。其中,源代碼以字符串的形式返回。
然后我們用正則表達(dá)式re庫(kù)在字符串(網(wǎng)頁(yè)源代碼)中匹配表示圖片鏈接的小字符串,返回一個(gè)列表。最后循環(huán)列表,根據(jù)圖片鏈接將圖片保存到本地。
其中urllib庫(kù)的使用在python2.x和python3.x中的差別很大,本案例以python3.x為例
直接上代碼:
''' 第一個(gè)簡(jiǎn)單的爬蟲程序,使用python3.x和urllib與re庫(kù)'''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函數(shù)將url添加頭部,模擬瀏覽器訪問 page = urllib.request.urlopen(url1).read() # 將url頁(yè)面的源代碼保存成字符串 page = page.decode('UTF-8') # 字符串轉(zhuǎn)碼 return pagedef getImg(page): # 該方法傳入html的源碼,經(jīng)過截取其中的img標(biāo)簽,將圖片保存到本機(jī) # findall(正則,代表頁(yè)面源碼的str)函數(shù),在字符串中按照正則表達(dá)式截取其中的小字符串 # findall()返回一個(gè)列表,列表中的元素是一個(gè)個(gè)的元組,元組的第一個(gè)元素是圖片的url,第二個(gè)元素是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: # 列表循環(huán) 上述代碼在找圖片的url時(shí),我們用的是re(正則表達(dá)式)。re用得好的話會(huì)有奇效,用的不好,效果極差。既然我們得到了網(wǎng)頁(yè)的源代碼,我們何不根據(jù)標(biāo)簽的名稱來得到其中的內(nèi)容。
接下來要介紹的BeautifulSoupl庫(kù)就能根據(jù)標(biāo)簽的名稱來得到標(biāo)簽的內(nèi)容。請(qǐng)參見本人博客:點(diǎn)我進(jìn)入博客
新聞熱點(diǎn)
疑難解答
網(wǎng)友關(guān)注