Python中网络页面抓取和页面分析

转载本文请以链接形式注明出处。

1.前言

        Python的网络抓取有很多包可以实现,比如:urllib、urllib2、httplib、httplib2。其中httplib、httplib2是专门处理与http相关的;而urllib、urllib2是借助于httplib、httplib2实现的,相当于在httplib、httplib2上又封装了一层来进行处理web数据。而urllib2是urllib的高版本,httplib2是httplib的高版本。

        这里我给出一个学习python库的网址,里面有各种lib库的讲解:http://docs.python.org/library/index.html  。有兴趣的读者可以看一下。

        由于最近在使用httplib2进行网上抓取数据,所以下面对httplib2进行介绍。

2.httplib2

(1)安装      

         httplib2的安装:首先下载python的httplib2的安装包,下载地址为:http://code.google.com/p/httplib2/downloads/list;其次, 在dos窗口下进入httplib2的解压目录,执行命令:python setup.py install  。 即完成安装。

(2)使用讲解

        下面再给出一个httplib2的学习地址,是httplib2的一个wiki,里面有几个httplib2的简单例子:http://code.google.com/p/httplib2/wiki/Examples

(a)下面给出第一个httplib2的例子,根据weibo用户的ID,抓取用户相关信息:

         这个例子涉及到cookies的使用,下面简单介绍一下cookies的问题:

         当用户抓取的网页需要登陆时,一般的登录页面只需要用户名和密码,此时我们可以采用username和password的python代码抓取网页。但是当用户频繁的登录抓取时,此时登录页面就需要输入用户名、密码和一个随机数字图片验证,图片验证无法屏蔽掉。此时,我们这里可以采用先获取用户登陆后的cookies,再以http的get请求的方式向用户发送headers(该headers包含用户登陆后的cookies信息),这样就避免了登陆。

        获取cookies的方法我感觉有2种,一种是手工方式:通过fiddler软件来查看,当用户在浏览器里输入请求的网址时,通过fiddler就可以查看用户的http的响应,具体的过程如下面2张图片所示,第一张图片是fiddler查看cookies的header,第二张图是拷贝该header:

       


        第二种获取cookies的方式,可以第一次通过用户名和密码向url发出请求,然后将请求后的response中的headers的cookies保存下来,下次就可以根据cookies去登录该url并获取页面内容。

        好,cookies介绍完毕,咱们回来,下面给出第一个demo(通过cookie登陆获取微博页面,并抓取微博用户信息):

#!/usr/bin/python
# -*-coding:utf-8 -*-
import httplib2
import urllib2
import re #正则表达式模块

class WeiboClass: #定义一个weibo类

    #获取指定url的网页内容
    def get_content(self,url,headers,id):
        http=httplib2.Http()
        response,content=http.request(url+str(id),'GET',headers=headers)
        #print url+str(id)
        return content.decode('unicode-escape').encode('utf-8')

    #判断weibo的用户是否是企业用户
    def is_company(self,url,headers,id):
        content=self.get_content(url,headers,id)
        title=r'行业'
        company_title=re.compile(title) 
        if company_title.search(content): #使用正则表达式对title进行匹配        
            return 1
        else:
            return 0
        
    #获取用户的weibo信息:ID,主页url,昵称
    def get_info(self, url,headers,id):
        flag=self.is_company(url,headers,id)
        content=self.get_content(url,headers,id)
        if flag==0:  #如果用户是个人用户            
            #print content
            #微博ID
            id_flag=r'\$CONFIG\[\'oid\'\] = \'([0-9].+?)\';'
            id_re=re.compile(id_flag)
            id_regx=id_re.search(content)
            id=id_regx.group(1)
            print id

            #微博url
            url_flag=r'<meta http-equiv="mobile-agent" content="format=xhtml;" url="weibo.cn/(.+?)\?'
            url_re=re.compile(url_flag)
            url_regx=url_re.search(content)
            url_0=url_regx.group(1)
            url='http://weibo.com/'+url_0
            print url
            
            #昵称
            name_flag='<div class="name clearfix">.+?<div class="left">(.+?)<'
            name_re=re.compile(name_flag,re.S)
            name_regx=name_re.search(content)
            name=name_regx.group(1)
            name=name.decode('utf-8').encode('GBK')
            print name

def main():            
    headers={"cookie":'NSC_wjq_xfjcp.dpn_w3.6
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值