亲身试用python简单小爬虫

    前几天基友分享了一个贴吧网页,有很多漂亮的图片,想到前段时间学习的python简单爬虫,刚好可以实践一下。

    以下是网上很容易搜到的一种方法:

 1 #coding=utf-8
 2 import urllib
 3 import re
 4 
 5 def getHtml(url):
 6     page = urllib.urlopen(url)
 7     html = page.read()
 8     return html
 9 
10 def getImg(html):
11     reg = r'src="(.+?.jpg)" pic_ext'
12     imgre = re.compile(reg)
13     imglist = re.findall(imgre,html)
14     x = 0
15     for imgurl in imglist:
16         urllib.urlretrieve(imgurl,'%s.jpg' % x)
17         x+=1
18 
19 
20 html = getHtml("http://tieba.baidu.com/p/2460150866")
21 
22 print getImg(html)

    我写的代码与之大同小异,但运行之居然没有反应;我甚至将代码直接copy下来运行,但还是不成功。

    没办法,只好自己逐一调试。

    首先我把获取到的html代码写入html.txt文件,方便我查看对照,这时,发现了第一个问题:通过urllib获得的html代码与浏览器中Ctrl+U查看到的代码并不是一回事。

    接着,我用正则';src=(.*?imgsrc.*?.jpg)'去匹配html.txt中的代码,这时,关键问题出现了:匹配到的都是诸如http%3A%2F%2Fxx.jpg 这样的地址,这样问题就很明显了,在使用urllib获取html时,':'和'/'被转码了。使用转码后的地址去下载图片当然是行不通的,需要将被转码的地址转回utf8编码。

    以下是我对gethtml(url)的修改:

def gethtml(url):
    page=urllib.urlopen(url)
    html=page.read()
    html=re.sub('%3A',':',html)
    html=re.sub('%2F','/',html)
    return html

   办法好像笨了一些,望大家多多指教。不过,这下程序就可以成功运行了~,分享下下载的图片,并附上地址:http://tieba.baidu.com/p/3604860421?lp=5027&mo_device=1&pn=0&

原文地址:https://www.cnblogs.com/cero/p/4306971.html