博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python爬虫urllib2库基本使用
阅读量:4511 次
发布时间:2019-06-08

本文共 4457 字,大约阅读时间需要 14 分钟。

 

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-Agentheader = {'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() 添加/修改一个特定的headerrequest.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 urllib2import random# 随机添加/修改User-Agenturl = '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() 添加/修改一个特定的headerrequest.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 urllibIn [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 urllib2url = '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 urllibimport 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 '-' * 50def 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

你可能感兴趣的文章
python 获取当前时间的用法
查看>>
谈谈Lucene和Solr索引存目录
查看>>
微信小程序 从本地相册选择图片或使用相机拍照chooseImage()和预览图片previewImage()...
查看>>
Vscode配置C++运行环境(2019/1//11更)并加入bits/stdc++.h头文件
查看>>
salesforce零基础学习(九十四)classic下pagelayout引入的vf page弹出内容更新此page layout...
查看>>
Web Server 启动工具
查看>>
eclipse oxygen离线安装activiti
查看>>
AngularJS学习
查看>>
单变量微积分笔记16——定积分的应用1(对数与面积)
查看>>
ACM模板——最短路
查看>>
实验3 分支语句和循环语句(1)
查看>>
Go语言实用技巧
查看>>
MySQL主从服务器的守护进程监视
查看>>
JSP页面上添加Fckeditor
查看>>
Mysql错误:Ignoring query to other database解决方法
查看>>
scrapyd spiderkeeper docker部署
查看>>
cf1061E Politics (费用流)
查看>>
sql 执行时间
查看>>
HDU 1174 爆头(三维空间点与直线关系)
查看>>
java中并发下的集合类
查看>>