python中loadpage_Python中网络页面抓取和页面分析

转载本文请以链接形式注明出处。1.前言Python的网络抓取有很多包可以实现,比如:urllib、urllib2、httplib、httplib2。其中httplib、httplib2是专门处理与http相关的;而urllib、urllib2是借助于httplib、httplib2实现的,相当于在httplib、httplib2上又封装了一层来进行处理web数据。而urllib2是urllib的高...
摘要由CSDN通过智能技术生成

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

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'

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='

.+?
(.+?)

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_w4=ffffffff0941137b45525d5f4f58455e445a4a423660; SUS=SID-1806453925-1342851885-XD-hgrjc-03210d75ca203f3ad0d57666a05ae49d; SUE=es%3Deabd0a14bc6e6123c5c4d058d9a2c96f%26ev%3Dv1%26es2%3Db50ae59b82b457a1ba54b2b7708fbb5b%26rs0%3DdP4RVYzORRwV64PFw6wRdNGBk0HP47V8C5SXUp%252F7Q9K2RcduYt4ECQbEDNZk%252Bs8GHDpW5wk%252B3%252FmYKP12zIyQbD1bUMd2wNBgdRX45p2rygizXgHMjH%252FFnU53HJFC2OfSvEHZADJkZD%252BTdLHidgoyy4maajVHi%252B%252B1en0zIKIf3mo%253D%26rv%3D0; SUP=cv%3D1%26bt%3D1342851885%26et%3D1342938285%26d%3Dc909%26i%3D4dc3%26us%3D1%26vf%3D0%2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值