網路爬蟲遇到問題(一)
阿新 • • 發佈:2019-02-10
# -*-coding:utf-8-*- import urllib.request import re # 獲取整個頁面資料 def getHtml(url): # urlib模組提供了讀取web頁面資料的介面 # page = urllib.urlopen(url) page = urllib.request.urlopen(url) html = page.read() return html # 篩選頁面中想要的資料,返回包含圖片的url地址 def getImg(html): reg = r'src="(.+?\.jpg)"pic_ext' # reg = r'src="(.*?\.jpg)"' # re.compile() 可以把正則表示式編譯成一個正則表示式物件. imare = re.compile(reg) html = html.decode('utf-8') #python3 # re.findall() 方法讀取html 中包含 imgre(正則表示式)的資料。 imglist = re.findall(imare,html) # return imglist x = 0 for imgurl in imglist: # 直接將遠端資料下載到本地。 urllib.request.urlretrieve(imgurl,"%s.jpg"%x) x = x+1 html = getHtml("http://news.ifeng.com/a/20161115/50258273_0.shtml") print (getImg(html))
程式碼執行可能出現以下情況:
錯誤1、
這一行中page =urllib.urlopen(url)
報錯:AttributeError:module 'urllib' has no attribute 'urlopen'
和下面有報錯:AttributeError:module 'urllib' has no attribute 'urlretrieve'
解決方法:是因為在python3.5中urllib下沒有方法urlopen和'urlretrieve',urllib的request模組下有此兩個方法,使用urllib.request可解決該問題;
錯誤2:
這一行中imglist =re.findall(imare,html) 報錯:TypeError: cannot usea string pattern on a bytes-like object
解決方法:python3.5需新增此行html=html.decode('utf-8') #python3