1. 程式人生 > >網路爬蟲遇到問題(一)

網路爬蟲遇到問題(一)

# -*-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