第一只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

原文地址:https://www.cnblogs.com/Bone-ACE/p/4531304.html