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

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

最新文章

  1. 如何让用户只能访问特定的数据库(MSSQL)
  2. 《Inside UE4》-2-GamePlay架构(一)Actor和Component
  3. Linux下的文本编辑工具
  4. 在VNC中Xfce4中Tab键失效的解决方法
  5. 解决github push错误The requested URL returned error: 403 Forbidden while accessing
  6. [转帖]Asp.NET 弹出页面
  7. mysql备份,还原命令
  8. transition的四个属性
  9. Vue源码后记-更多options参数(2)
  10. 分享Java的9个知识点
  11. java中文拼音字母排序
  12. jQuery的学习笔记4
  13. 服务器A制定计划任务,BAT脚本自动备份oracle数据文件,拷贝至服务器B的共享目录。
  14. mockjs学习
  15. Vue-认识状态管理vuex
  16. Java 修饰符顺序问题
  17. Installing Jenkins as a Windows service
  18. LINQ 图解 LINQ学习第三篇
  19. 树莓派 SD卡镜像备份
  20. perforce变量配置与使用

热门文章

  1. Codeforces 854B Maxim Buys an Apartment:贪心
  2. 在eclipse创建Maven工程修改默认JRE
  3. spring2.5和struts1.3.8整合
  4. OP趋势系统
  5. java-04 数组和二维数组
  6. 洛谷P3372线段树模板1——线段树
  7. Adobe Flash Player 27 on Fedora 27/26, CentOS/RHEL 7.4/6.9
  8. 基于Qt Gui的Led控制显示程序
  9. [hdu3586]Information Disturbing树形dp+二分
  10. pure css做的手机页面