zoukankan      html  css  js  c++  java
  • 亲身试用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&

  • 相关阅读:
    shell脚本基础->
    1->小规模集群架构规划
    推荐系统读书笔记(一)好的推荐系统
    数据挖掘概念与技术读书笔记(二)认识数据
    Linux编辑器vi使用方法详细介绍
    用户不在sudoers文件中的解决方法
    机器学习实战读书笔记(三)决策树
    机器学习实战读书笔记(二)k-近邻算法
    机器学习实战读书笔记(一)机器学习基础
    R语言实战读书笔记(十三)广义线性模型
  • 原文地址:https://www.cnblogs.com/cero/p/4306971.html
Copyright © 2011-2022 走看看