Python爬虫urllib2库基本使用

 

demo01

# -*- coding:utf-8 -*-

import urllib2  # 导入urllib2库

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

# 类文件对象支持 文件对象的操作方法, 如read()方法读取文件全部内容
html = response.read()

# 打印字符串
print html

  

demo02

import urllib2

# Request
# 如果需要执行更复杂的操作, 比如增加HTTP报头, 必须创建一个Request实例来作为urlopen()的参数
# 访问的url地址则作为Request实例的参数

# url 作为Request()方法的参数, 并构造返回一个Request对象
request = urllib2.Request('http://www.baidu.com')

# Request对象作为urlopen()方法的参数, 发送给服务器并接受响应
response = urllib2.urlopen(request)

html = response.read()

print html

demo03

import urllib2

# Request(url, data, headers)
#   url
#   data url提交的数据, POST请求
#   headers  是一个字典 包含需要发送的HTTP报头的键值对


url = 'http://www.itcast.cn'

# IE9.0 的User-Agent
header = {'User-Agent': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;'}
request = urllib2.Request(url, headers=header)

# 通过调用Request.add_header() 添加/修改一个特定的header
request.add_header('Connection', 'keep-alive')

# 调用Request.add_header()来看header信息
# request.get_header(header_name='Connection')

response = urllib2.urlopen(request)
html = response.read()

print html

demo04

# -*- coding:utf-8 -*-

import urllib2
import random

# 随机添加/修改User-Agent

url = 'http://www.itcast.cn'

ua_list = [
    "Mozilla/5.0 (Windows NT 6.1; ) Apple.... ",
    "Mozilla/5.0 (X11; CrOS i686 2268.111.0)... ",
    "Mozilla/5.0 (Macintosh; U; PPC Mac OS X.... ",
    "Mozilla/5.0 (Macintosh; Intel Mac OS... "
]

user_agent = random.choice(ua_list)

request = urllib2.Request(url)

# 调用Request.add_header() 添加/修改一个特定的header
request.add_header('User-Agent', user_agent)

# 第一个字母大写, 后面的全部小写
request.get_header('User-agent')

response = urllib2.urlopen(request)

html = response.read()
print html
  • urllib 仅可以接受URL,不能创建 设置了headers 的Request 类实例;
  • 但是 urllib 提供 urlencode 方法用来GET查询字符串的产生,而 urllib2 则没有。(这是 urllib 和 urllib2 经常一起使用的主要原因)
  • 编码工作使用urllib的urlencode()函数,帮我们将key:value这样的键值对转换成"key=value"这样的字符串,解码工作可以使用urllib的unquote()函数。(注意,不是urllib2.urlencode() )
# ipython2中的测试结果
In [1]: import urllib

In [2]: word = {'q': 'python爬虫'}

# urllib.urlencode()方法, 将字典键值对按URL编码转换, 从而能被web服务器接受
In [3]: urllib.urlencode(word)
Out[3]: 'q=python%E7%88%AC%E8%99%AB'

# 通过urllib.unquote()方法, 把URL编码字符串 转换回原先字符串
In [4]: print urllib.unquote('q=python%E7%88%AC%E8%99%AB')
q=python爬虫

 

get请求 用于我们向服务器获取数据

    例 http://www.google.com.hk/search?q=Python爬虫
import urllib # 负责url编码处理
import urllib2

url = 'http://www.google.com.hk/search'
word = {'q': 'Python爬虫'}
word = urllib.urlencode(word)  # 转换成url编码格式(字符串)
new_url = url + '?' + word  # url首个分隔符就是?

header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}

request = urllib2.Request(new_url, headers=header)

response = urllib2.urlopen(request)

print response.read()

批量爬取贴吧页面数据

mport urllib
import urllib2


"""
批量爬取贴吧页面数据
    百度贴吧LOL吧
        第一页:http://tieba.baidu.com/f?kw=lol&ie=utf-8&pn=0
        第二页: http://tieba.baidu.com/f?kw=lol&ie=utf-8&pn=50
        第三页: http://tieba.baidu.com/f?kw=lol&ie=utf-8&pn=100
    贴吧中每个页面不同之处,就是url最后的pn的值,其余的都是一样的,我们可以抓住这个规律。
"""


def writeFile(html, filename):
    """
    作用: 爆粗安服务器相应文件到本地磁盘文件里
    :param html: 服务器响应文件
    :param filename: 本地磁盘文件名
    """
    print '正在存储' + filename
    with open(filename, 'w') as f:
        f.write(html)
    print '-' * 50


def loadPage(url, filename):
    """
    作用:根据url发送请求, 获取服务器响应文件
    :param url: 爬取的url地址
    :param filename: 文件名
    :return 返回服务器相应文件
    """
    print '正在下载' + filename

    headers = {"User-Agent": "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"}

    request = urllib2.Request(url, headers=headers)
    response = urllib2.urlopen(request)
    return response.read()


def tiebaSpider(url, beginPage, endPage):
    """
    作用: 负责处理url, 分配每个url去发送请求
    :param url: 需要处理的第一个url
    :param beginPage: 爬虫执行的起始页面
    :param endPage: 爬虫执行的截止页面
    """

    for page in range(beginPage, endPage+1):
        pn = (page - 1) * 50

        filename = '第' + str(page) + '页.html'
        # 组合完整的url, 并且pn值每次增加50
        fullurl = url + '&pn=' + str(pn)

        # 调用loadPage()发送请求获取HTML页面
        html = loadPage(fullurl, filename)
        # 将获取到的HTML页面写入本地磁盘文件
        writeFile(html, filename)


# 模拟 main 函数
if __name__ == '__main__':

    kw = raw_input('请输入要爬取的贴吧:')
    # 输入起始页和终止页, str转成int类型
    beginPage = int(raw_input('请输入起始页'))
    endPage = int(raw_input('请输入终止页'))

    url = 'http://tieba.baidu.com/f?'
    key = urllib.urlencode({'kw': kw})

    # 组合url
    url = url + key
    tiebaSpider(url, beginPage, endPage)

  

 

转载于:https://www.cnblogs.com/luck570/p/8615158.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值