Python学习之路

跟着作者向右奔跑彭老师开的专题Python爬虫 来学习python。

小白一样的我,在照搬代码之后运行却出现一些错误,特此总结下来,可以记录自己的成长,也可以帮助遇到同样错误的童鞋。


Python学习笔记-1

import re  
import urllib  

def getHtml(url):  
    page = urllib.urlopen(url)  
    html = page.read()  
    return html  

def getImg(html):  
    reg = r'src="(.+?\.jpg)" pic_ext'  
    imgre = re.compile(reg)  
    imglist = imgre.findall(html)  
    x = 0  
    for imgurl in imglist:  
        urllib.urlretrieve(imgurl,'%s.jpg' % x)  
        x = x + 1          

html = getHtml("http://tieba.baidu.com/p/2460150866")  
getImg(html)
  1. 原代码直接run之后,报错如下图:


    Python学习之路_第1张图片
    Erro1

    报错原因:

Python3版本,urllib库中属性不存在urlopen。官方3.0版本已经把urllib2,urlparse等五个模块都并入了urllib中,也就是整合了。
import urllib.request
page =urllib.request.urlopen(url)

  1. 修改之后,报错如下图:


    Python学习之路_第2张图片
    Erro2

    报错原因:

TypeError: can’t use a string pattern on a bytes-like object.
html用decode(‘utf-8’)进行解码,由bytes变成string。
py3的urlopen返回的不是string是bytes。
解决方法是:把’html’类型调整一下:html.decode(‘utf-8’)

看修改之后的代码:

import re
import urllib.request

def getHtml(url):
    page = urllib.request.urlopen(url)
    html = page.read()
    return html

def getImg(html):
    reg = r'src="(.+?\.jpg)" pic_ext'
    imgre = re.compile(reg)
    imglist = imgre.findall(html)
    x = 68
    for imgurl in imglist:
        urllib.request.urlretrieve(imgurl, '%s.jpg' % x)
        x = x + 1

html = getHtml("http://tieba.baidu.com/p/2460150866?pn=2")
getImg(html.decode("utf-8"))

未完待续,下一篇学习中

你可能感兴趣的:(Python学习之路)