Python 中利用urllib2简单实现网页抓取

         网页抓取就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。

在Python中,可以使用urllib2这个模块来抓取网页,模块提供了读取web页面数据的接口,我们可以像读取本地文件一样读取wwwftp上的数据.

HTTP是基于请求和应答机制的:客户端提出请求,服务端提供应答。

以下实现了最简单的urllib2抓取网页。

1.获取整个页面数据

#!/usr/bin/env python
import urllib2
def GetHtml(url):
      response = urllib2.urlopen(url)
      HtmlPage = response.read()
      return HtmlPage
print GetHtml('http://www.baidu.com')

#!/usr/bin/env python
import urllib2
def GetHtml(url):
      req = urllib2.Request(url)
      response = urllib2.urlopen(req)
      HtmlPage = response.read()
      return HtmlPage
print GetHtml('http://www.baidu.com')
以上两种形式一样。 urllib2用一个Request对象来映射提出的HTTP请求,将请求的地址创建一个Request对象,

通过调用urlopen并传入Request对象,响应后将返回response文件对象,再调用read()函数读取抓取的网页内容。


2.获取页面中特定的数据

     这个首先需要了了解一些正则表达式的知识,http://blog.csdn.net/seven_five577/article/details/48622185

http://blog.csdn.net/seven_five577/article/details/48469751

假设我想要获取这一网页点击打开链接的所有小黄人的图片       

点击某一图片的审查元素找到图片的地址


#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urllib
import re
def  GetHtml(url):
        response = urllib.urlopen(url)
        HtmlPage = response.read()
        return HtmlPage
def  GetImg( HtmlPage):
        Img=re.compile(r'src="(.+?\.img)" ')
        ImgList = re.findall(Img,HtmlPage)
        count = 1
        for ImgURL in ImgList:
              urllib.urlretrieve(ImgURL,'%s.img' % count)
              count+=1
HtmlPage = GetHtml(<span style="font-size:14px;">'http://www.3lian.com/gif/2014/09-17/60992.html</span>')
print GetImg(HtmlPage)
urllib.urlretrieve() 方法,直接将远程数据下载到本地。(注: urllib2没有urlretrieve这个方法)

通过一个for循环对获取的每个图片的连接进行遍历,保存的位置默认为程序的存放目录。


修改上面的程序添加循环可以爬多张网页的图。

# -*- coding: utf-8 -*-  
import urllib 
import re

def GetHtml(url):
      i=1
      count = 1
      for i in range(1,5):
           URL = url + str(i)
           response = urllib.urlopen(URL)
           HtmlPage = response.read()                            
           Img=re.compile(r'src="(.+?\.jpg)" ')  
           ImgList = re.findall(Img,HtmlPage)  
 
           for ImgURL in ImgList:
                 urllib.urlretrieve(ImgURL,'%s.jpg' % count)  
                 count+=1  
print GetHtml ('https://mm.taobao.com/json/request_top_list.htm?type=0&page=')  

若urllib.urlretrieve('http:' +ImgURL,'%s.jpg' % count)  变成urllib.urlretrieve(ImgURL,'%s.jpg' % count) 

则会出现以下错误,但是爬单张网页不会出错。


以上代码可稍微改变一点 实现任意页面的图片抓取。

# -*- coding: utf-8 -*-  
import urllib 
import re

def GetHtml(url,start_page,end_page):
      count = 1
      for i in range(start_page,end_page):
           URL = url + str(i)
           response = urllib.urlopen(URL)
           HtmlPage = response.read()                            
           Img=re.compile(r'src="(.+?\.jpg)" ')  
           ImgList = re.findall(Img,HtmlPage)  
 
           for ImgURL in ImgList:
                 urllib.urlretrieve('http:' +ImgURL,'%s.jpg' % count)  
                 count+=1  
start_page = int(raw_input(u'please input the start_page:\n'))
end_page = int (raw_input(u'please input the end_page:\n'))
print GetHtml ('https://mm.taobao.com/json/request_top_list.htm?type=0&page=',start_page,end_page)


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值