Urllib2基础操作

1、打开网页(urlopen)

打开一个网页

import urllib2
response = urllib2.urlopen('http://www.baidu.com')
html= response.read()
print html

urlopen一般常用的有三个参数,它的参数如下:

urllib.requeset.urlopen(url,data,timeout)

data参数的使用(GET)

import urllib
import urllib2 data = {'email':'myemail', 'password':'password'}
params = urllib.urlencode(params)
response= urllib.urlopen("%s?%s"%(uri, params))
code = response.getcode()

data参数的使用(POST)

import urllib
import urllib2 data = {'email':'myemail', 'password':'password'}
params = urllib.urlencode(data)
response= urllib.urlopen(uri, params)
code = response.getcode()

所以如果我们添加data参数的时候就是以post请求方式请求,如果没有data参数就是get请求方式

timeout参数的使用

在某些网络情况不好或者服务器端异常的情况会出现请求慢的情况,请求设置一个超时时间

import urllib2

response = urllib2.urlopen('http://www.baidu.com', timeout=1)
print(response.read())

2、打开网页(request)

打开一个网页

import urllib.request

request = urllib.request.Request('https://www.baidu.com')
response = urllib.request.urlopen(request)
print(response.read().decode('utf-8'))

指定请求头

import urllib2

# 制定请求头
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64)"} # 封装请求
request = urllib2.Request(url=url, headers=headers)
response = urllib2.urlopen(request)
content = response.read().decode('utf-8')
print content

3、进阶

增加代理

# 自定义headers
headers = {
'Host':'www.dianping.com',
'Cookie': 'JSESSIONID=F1C38C2F1A7F7BF3BCB0C4E3CCDBE245 aburl=1; cy=2;'
'User-Agent': "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.0 Safari/532.5",
} proxy_handler = urllib2.ProxyHandler({'http': 'http://host:port'})
opener = urllib2.build_opener(proxy_handler)
urllib2.install_opener(opener)
request = urllib2.Request(url, headers=headers)
response = urllib2.urlopen(request)
content = response.read().decode('utf-8')

操作cookie

import urllib2
import cookielib
import json cookie = cookielib.CookieJar()
cookie_s = urllib2.HTTPCookieProcessor(cookie) # 创建cookie处理器
opener = urllib2.build_opener(cookie_s)
# 构建opener
urllib2.install_opener(opener)
response= urllib2.urlopen('http://www.dianping.com').read() # 读取指定网站的内容 cj = urllib2.HTTPCookieProcessor(cookie)
print response # 网页HTML # 查看cookie
print cookie, type(cookie)
for item in cookie:
print 'name:' + item.name + '-value:' + item.value

 保存cookie

def saveCookie():
# 设置保存cookie的文件
filename = 'cookie.txt'
# 声明一个MozillaCookieJar对象来保存cookie,之后写入文件
cookie = cookielib.MozillaCookieJar(filename)
# 创建cookie处理器
handler = urllib2.HTTPCookieProcessor(cookie)
# 构建opener
opener = urllib2.build_opener(handler)
# 创建请求
res = opener.open('http://www.baidu.com')
# 保存cookie到文件
# ignore_discard的意思是即使cookies将被丢弃也将它保存下来
# ignore_expires的意思是如果在该文件中cookies已经存在,则覆盖原文件写入
cookie.save(ignore_discard=True, ignore_expires=True)

 在文件中取出cookie

def getCookie():
# 创建一个MozillaCookieJar对象
cookie = cookielib.MozillaCookieJar()
# 从文件中的读取cookie内容到变量
cookie.load('cookie.txt', ignore_discard=True, ignore_expires=True)
# 打印cookie内容,证明获取cookie成功
for item in cookie:
print 'name:' + item.name + '-value:' + item.value
# 利用获取到的cookie创建一个opener
handler = urllib2.HTTPCookieProcessor(cookie)
opener = urllib2.build_opener(handler)
res = opener.open('http://www.baidu.com')
print res.read()

来个实例

def my_cookie_test():
headers = {
'User-Agent': "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.0 Safari/532.5",
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4',
'Connection': 'keep-alive',
'Cookie': 'cy=2; _lxsdk_cuid=16000a1a16cc8-0629d2ca3b9f7-40544230-100200-16000a1a16dc8; _lxsdk=16000a1a16cc8-0629d2ca3b9f7-40544230-100200-16000a1a16dc8; _lxsdk_s=16000a1a16f-c56-870-2aa%7C%7C23; _hc.v=44792549-7147-7394-ac0a-eefed1fa19a2.1511839081; s_ViewType=10',
'Host': 'www.dianping.com',
'Referer': 'http://www.dianping.com/shop',
'Upgrade-Insecure-Requests': 1
}
# 请求cookie
cj_a = cookielib.CookieJar()
cj_s = urllib2.HTTPCookieProcessor(cj_a)
proxy_s = urllib2.ProxyHandler({'http': '0.0.0.0:8080'})
opener = urllib2.build_opener(proxy_s, cj_s)
urllib2.install_opener(opener)
try:
request = urllib2.Request("http://www.dianping.com/shop/000000/", headers=headers)
response = urllib2.urlopen(request)
content = response.read().decode('utf-8')
# HTML
print content
cookie_data = {}
for item in cj_a:
# print '请求之后:name:' + item.name + '-value:' + item.value
cookie_data[item.name] = item.value
cookie_str = json.dumps(cookie_data)
with open('cookie.txt', 'w') as f:
f.write(cookie_str)
print("cookies信息已保存到本地")
except Exception as e:
print e

网页信息抽取。。。待下期。。。

urllib2基础操作的更多相关文章

  1. python基础操作以及hdfs操作

    目录 前言 基础操作 hdfs操作 总结 一.前言        作为一个全栈工程师,必须要熟练掌握各种语言...HelloWorld.最近就被"逼着"走向了python开发之路, ...

  2. MYSQL基础操作

    MYSQL基础操作 [TOC] 1.基本定义 1.1.关系型数据库系统 关系型数据库系统是建立在关系模型上的数据库系统 什么是关系模型呢? 1.数据结构可以规定,同类数据结构一致,就是一个二维的表格 ...

  3. 【Learning Python】【第二章】Python基础类型和基础操作

    基础类型: 整型: py 3.0解决了整数溢出的问题,意味着整型不必考虑32位,64位,有无符号等问题,你写一个1亿亿亿,就是1亿亿亿,不会溢出 a = 10 ** 240 print(a) 执行以上 ...

  4. Emacs学习心得之 基础操作

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Emacs学习心得之 基础操作 1.前言与学习计划2.Emacs基础操作 一. 前言与学习计 ...

  5. Git基础操作

    配置秘钥 1.检查本机有没有秘钥 检查~/.ssh看看是否有名为d_rsa.pub和id_dsa.pub的2个文件. $ ~/.sshbash: /c/Users/lenovo/.ssh: Is a ...

  6. activiti基础操作

    package activitiTest; import java.io.InputStream; import java.util.List; import java.util.zip.ZipInp ...

  7. 《Genesis-3D开源游戏引擎-官方录制系列视频教程:基础操作篇》

    注:本系列教程仅针对引擎编辑器:v1.2.2及以下版本 G3D基础操作   第一课<G3D编辑器初探> G3D编辑器介绍,依托于一个复杂场景,讲解了场景视图及其基本操作,属性面板和工具栏的 ...

  8. MYSQL 基础操作

    1.MySQL基础操作 一:MySQL基础操作 1:MySQL表复制 复制表结构 + 复制表数据 create table t3 like t1; --创建一个和t1一样的表,用like(表结构也一样 ...

  9. php之文件基础操作

    在php中对文件的基础操作非常的简单,php提供的函数粗略的用了一遍. file_get_contents():可以获取文件的内容获取一个网络资源的内容,这是php给我封装的一个比较快捷的读取文件的内 ...

随机推荐

  1. line -1: Validation of SOAP-Encoded messages not supported

    <soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd=" ...

  2. 一步一步教你简单完成 Android USB开发

    项目中有一个新的需求,要求可以连接一个USB体温枪,APP可以从体温枪中读取到体温数据,一番搜寻之后发现一个封装很棒的USB通信库. github地址:usb-serial-for-android 准 ...

  3. Java企业微信开发_10_未验证域名归属,JS-SDK功能受限

    1.现象: 在企业微信后台填写可信域名后,提示:未验证域名归属,JS-SDK功能受限,如下图: 点击“申请域名校验”后, 注意:域名根目录 当时一直不清楚这个域名根目录在哪里,最后让我给试出来了 2. ...

  4. java数据的5种存储位置(转)

    任何语言所编写的程序,其中的各类型的数据都需要一个存储位置,java中书的存储位置分为以下5种: 1.寄存器 最快的存储区,位于处理器内部,但是数量及其有限.所以寄存器根据需求自动分配,无序人为控制. ...

  5. 网络编程学习笔记-浅析socket

    一.问题的引入——socket的引入是为了解决不同计算机间进程间通信的问题 .socket与进程的关系 ).socket与进程间的关系:socket 用来让一个进程和其他的进程互通信息(IPC),而S ...

  6. Katalon Recorder 自动录制 Selenium 爬虫脚本

    相信很多小伙伴都用过 Selenium 来完成爬虫工作,今天就给大家带来一个神器,可以录制你的浏览器动作,然后直接生成 Selenium 脚本,是不是心动了? 1 Selenium 简介 Seleni ...

  7. bzoj 4503 两个串 快速傅里叶变换FFT

    题目大意: 给定两个\((length \leq 10^5)\)的字符串,问第二个串在第一个串中出现了多少次.并且第二个串中含有单字符通配符. 题解: 首先我们从kmp的角度去考虑 这道题从字符串数据 ...

  8. 【Lintcode】046.Majority Number

    题目: Given an array of integers, the majority number is the number that occurs more than half of the ...

  9. WPF Background的设置有坑

    今天帮忙同事解决在后台绑定时,动态更改控件(Grid)的Background. 有个陷阱,C#有2个命名空间有Brush和Color, 分别为System.Drawing和System.Window. ...

  10. Lagom学习 六 Akka Stream

    lagom中的stream 流数据处理是基于akka stream的,异步的处理流数据的.如下看代码: 流式service好处是: A: 并行:  hellos.mapAsync(8, name -& ...