zoukankan      html  css  js  c++  java
  • 第一只python小爬虫

    前言:

    互联网就像一张无形的蜘蛛网,网站就相当于在这张网的交叉结点。而网络爬虫就是这张网上的蜘蛛,它是一种程序,能够利用url链接在各网站之间自动穿梭并抓取所需数据。

    学了python的正则表达式之后,我便迫不及待的想要找个应用玩一下,而网络爬虫就是个不二的选择。下面记录一下我写的第一只小爬虫,用来自动下载网页上的图片。

    (操作环境:32位Win8系统,运行工具:python2.7.9+Eclipse.)


    正文:

    1、首先,每个网站都有一个URL地址,通过这个URL可以进入各个相应的网站。我们在浏览网页 点击进入其他网页的时候,其实就是打开其他网页的跳转链接URL。我们所看到的每个网页“背后”都有着很多其他网页的跳转链接,我们只需鼠标右键打开网页源代码即可查看到。

    2、首先,我们用到的是python的urllib模块。其中有几个方法是比较重要的:

    url.urlopen(url,data=None,proxies=None,context=None)  根据URL打开网页,返回一个句柄

    url.urlopen()的对象有个方法:read()  用于读取网页源代码

    url.urlretrieve(url,filename=None,reporthook=None,data=None,context=None)  用于从网页上下载数据到本地


    我们首先用urlopen()打开一个网页,获得一个句柄;然后用句柄.read()获取网页源代码;再用正则表达式从网页源代码中找出各个图片的URL;最后用urlretrieve(URL,'XXX.jpg')下载图片。

    代码如下:

    import re
    import urllib
    
    def getHtml(url):
        page = urllib.urlopen(url)
        html1 = page.read()
        return html1
    
    def getImg(html1):
        reg = 'src="(http://img.{,110}?.jpg)"'
        imglist = re.findall(reg,html1)
        urllib.urlretrieve(imglist[1],'1.jpg')
    
    str2 = raw_input('Please input URL:')
    html1 = getHtml(str2)
    getImg(html1)
    print 'Finish!'
    示例网页:http://mm.taobao.com/689744369.htm

    以上代码只下载了一张图片,但网页上所有图片的URL都已经找到 放在imglist里面,我们只要加上个循环就可以下载全部图片了。


    代码很简单,主要是要获取到图片的URL。而图片URL的获取 是从网页源代码上用正则表达式匹配出来的。

    每一个网页对应的源代码格式都会有点差异,所以我们从不同网页上下载图片,最重要的就是查看网页源代码,分析图片URL的位置,然后编写恰当的正则表达式把图片URL拿下来。


    分享两个视频教程,一个是智普教育的淘女郎图片爬虫(http://pan.baidu.com/s/1ntj2AX7),另一个是中谷教育的小爬虫教学视频(http://pan.baidu.com/s/1nt63lR7)

    我最初看的是中谷教学视频,初识网络小爬虫。后来看到智普的视频,最大的收获就是不小心知道了淘女郎的网址(http://mm.taobao.com/689744369.htm)里面一大片MM的照片,正愁没个好网址来练手呢。然后智普在获取图片URL的时候用的是切片,这也是一种方法,但相对于正则表达式而言就显得太繁杂了。


    总结:

    感觉这个小爬虫挺好玩的,就是现在下载来的图片没什么用,下完了看两眼就都删了。在知乎、博客里面搜了python爬虫的相关资料,其实我这个小爬虫也太小了,根本微不足道,只是下载几张图片而已。爬虫的真正应用是在搜索引擎和爬一些供数据挖掘的源数据,稍微大只一点的爬虫应该是运行在分布式机器上的,而且能够熟练、有效地在各个网页中穿梭、抓取数据。任重道远,继续努力!


    以下是我抓取整一个页面10个淘女郎的图片(将近两千张),首先获取10个淘女郎的主页链接,进入各个淘女郎的主页,然后再获取图片的URL进行下载:

    import re
    import urllib
    global a
    a = 1
    
    def getHtml(url):
        page = urllib.urlopen(url)
        html1 = page.read()
        return html1
         
    def getImg(html1):
        global a
        reg = 'src="(http://img.{,110}?.jpg)"'
        imgre = re.compile(reg)
        imglist = imgre.findall(html1)
        for imgurl in imglist:
            urllib.urlretrieve(imgurl,'%d.jpg'%a)
            print a,imgurl
            a += 1
    
    strMain = raw_input('Please input URL:')
    htmlMain = getHtml(strMain)
    regMain = 'a href="(http://mm.taobao.com/d+?.htm)'
    urlSon = re.compile(regMain)
    htmlList = urlSon.findall(htmlMain)
    for html in htmlList:
        html0 = getHtml(html)
        getImg(html0)
        
    print 'Finish!'
    示例网页:http://mm.taobao.com/json/request_top_list.htm?type=0&page=8

  • 相关阅读:
    149. Max Points on a Line(js)
    148. Sort List(js)
    147. Insertion Sort List(js)
    146. LRU Cache(js)
    145. Binary Tree Postorder Traversal(js)
    144. Binary Tree Preorder Traversal(js)
    143. Reorder List(js)
    142. Linked List Cycle II(js)
    141. Linked List Cycle(js)
    140. Word Break II(js)
  • 原文地址:https://www.cnblogs.com/Bone-ACE/p/4531304.html
Copyright © 2011-2022 走看看