urllib2库

网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。在Python中有很多库可以用来抓取网页,我们先学习urllib2。(urllib2在python3.x中被修改为urllib.request)

1、Request、urlopen、read、getcode、geturl、info

# -*- coding: UTF-8 -*-
import urllib2

# 向指定url发送请求,返回值 = 服务器响应的类文件对象
response = urllib2.urlopen("http://www.baidu.com")

# request = urllib2.Request("http://www.baidu.com") # 构造一个请求对象
# response = urllib2.urlopen(request) # 返回值:服务器响应的类文件对象

html = response.read()  # 类文件对象的操作方法,如read()方法读取文件全部内容,返回字符串
code = response.getcode()  # 返回HTTP响应码
url  =  response.geturl()  # 返回实际数据的实际URL,防止重定向问题
info =  response.info()   # 返回服务器响应的HTTP报头信息

2、add_header、get_header
user-Agent:决定用户的浏览器,为了获取更好的HTML页面效果

# -*- coding: UTF-8 -*-

import urllib2
import random

url = "http://www.baidu.com"

# 可以是User-Agent列表,也可以是代理列表
ua_list = [
    "Mozilla/5.0(Macintosh;Intel Mac OS X 10.6;rv2.0.1)Gecko/20100101 Firefox/4.0.1",
    "Mozilla/5.0(Windows NT 6.1;rv2.0.1)Gecko/20100101 Firefox/4.0.1",
]

# 在User-Agent列表中随机选择一个User-Agent
user_agent = random.choice(ua_list)

# 构造一个请求对象
request = urllib2.Request(url)

# add_header()方法  添加/修改 一个HTTP报头
request.add_header("User-Agent", user_agent)

# get_header() 获取一个已有的HTTP报头的值,注意只能是第一个字母大写,其他的必须小写
print request.get_header("User-agent")

# 返回值:服务器响应的类文件对象
response = urllib2.urlopen(request)

# 类文件对象的操作方法,如read()方法读取文件全部内容,返回字符串
html = response.read()

3、urlencode、unquote
urlencode 接受的参数是一个字典,它用于将带有汉字的URL转码
① 示例1: 基础用法

import urllib   # 只用于转码

wd = {"wd":"传智播客"}
res1 = urllib.urlencode(wd)
print res1
res2 = urllib.unquote(res1)
print res2

② 示例2: 访问http://www.baidu.com/s?wd=传智播客

# -*- coding: UTF-8 -*-

import urllib2
import urllib
import random

url = "http://www.baidu.com/s"

wd = {"wd":"传智播客"}
wd = urllib.urlencode(wd)

fullurl = url + wd

# 可以是User-Agent列表,也可以是代理列表
ua_list = [
    "Mozilla/5.0(Macintosh;Intel Mac OS X 10.6;rv2.0.1)Gecko/20100101 Firefox/4.0.1",
    "Mozilla/5.0(Windows NT 6.1;rv2.0.1)Gecko/20100101 Firefox/4.0.1",
]

# 在User-Agent列表中随机选择一个User-Agent
user_agent = random.choice(ua_list)

# 构造一个请求对象
request = urllib2.Request(fullurl)

# add_header()方法  添加/修改 一个HTTP报头
request.add_header("User-Agent", user_agent)

# get_header() 获取一个已有的HTTP报头的值,注意只能是第一个字母大写,其他的必须小写
print request.get_header("User-agent")

# 返回值:服务器响应的类文件对象
response = urllib2.urlopen(request)

# 类文件对象的操作方法,如read()方法读取文件全部内容,返回字符串
html = response.read()

你可能感兴趣的:(Python爬虫)