文档章节

爬虫简单笔记——urllib.request有关用法整理

 老人学编程
发布于 2017/05/05 13:19
字数 1332
阅读 507
收藏 0

一、urllib.request

#1 最简单

import urllib.request
response = urllib.request.urlopen('http://python.org/')
html = response.read()
#2 使用 Request

import urllib.request
req = urllib.request.Request('http://python.org/')
response = urllib.request.urlopen(req)
the_page = response.read()
#3 发送数据
import urllib.parse
import urllib.request

url = 'http://localhost/login.php'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
values = {
'act' : 'login',
'login[email]' : 'yzhang@i9i8.com',
'login[password]' : '123456'
}
data = urllib.parse.urlencode(values)
req = urllib.request.Request(url, data)
req.add_header('Referer', 'http://www.python.org/')
response = urllib.request.urlopen(req)
the_page = response.read()
print(the_page.decode("utf8"))
#4 发送数据和header

import urllib.parse
import urllib.request

url = 'http://localhost/login.php'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
values = {
'act' : 'login',
'login[email]' : 'yzhang@i9i8.com',
'login[password]' : '123456'
}
headers = { 'User-Agent' : user_agent }

data = urllib.parse.urlencode(values)
req = urllib.request.Request(url, data, headers)
response = urllib.request.urlopen(req)
the_page = response.read()

print(the_page.decode("utf8"))

 

#6 异常处理1

from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError
req = Request("http://twitter.com/")
try:
response = urlopen(req)
except HTTPError as e:
print('The server couldn\'t fulfill the request.')
print('Error code: ', e.code)
except URLError as e:
print('We failed to reach a server.')
print('Reason: ', e.reason)
else:
print("good!")
print(response.read().decode("utf8"))
#7 异常处理2

from urllib.request import Request, urlopen
from urllib.error import URLError
req = Request("http://twitter.com/")
try:
response = urlopen(req)
except URLError as e:
if hasattr(e, 'reason'):
print('We failed to reach a server.')
print('Reason: ', e.reason)
elif hasattr(e, 'code'):
print('The server couldn\'t fulfill the request.')
print('Error code: ', e.code)
else:
print("good!")
print(response.read().decode("utf8"))
#8 HTTP 认证

import urllib.request

# create a password manager
password_mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()

# Add the username and password.
# If we knew the realm, we could use it instead of None.
top_level_url = "https://cms.tetx.com/"
password_mgr.add_password(None, top_level_url, 'yzhang', 'cccddd')

handler = urllib.request.HTTPBasicAuthHandler(password_mgr)

# create "opener" (OpenerDirector instance)
opener = urllib.request.build_opener(handler)

# use the opener to fetch a URL
a_url = "https://cms.tetx.com/"
x = opener.open(a_url)
print(x.read())

# Install the opener.
# Now all calls to urllib.request.urlopen use our opener.
urllib.request.install_opener(opener)

a = urllib.request.urlopen(a_url).read().decode('utf8')
print(a)
#9 使用代理

import urllib.request

proxy_support = urllib.request.ProxyHandler({'sock5': 'localhost:1080'})
opener = urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener)

a = urllib.request.urlopen("http://g.cn").read().decode("utf8")
print(a)
#10 超时

import socket
import urllib.request

# timeout in seconds
timeout = 2
socket.setdefaulttimeout(timeout)

# this call to urllib.request.urlopen now uses the default timeout
# we have set in the socket module
req = urllib.request.Request('http://twitter.com/')
a = urllib.request.urlopen(req).read()
print(a)
#11 使用cookie
# 这个模块主要提供了这几个对象,CookieJar,FileCookieJar,MozillaCookieJar,LWPCookieJar。

#urllib与http.cookiejar结合使用

#cookielib模块一般与urllib模块配合使用,

#主要用在urllib.requests.build_oper()函数中作为urllib.requests.HTTPCookieProcessor()的参数。

import urllib.request

import http.cookiejar

# 初始化一个CookieJar来处理Cookie

cookie=http.cookiejar.CookieJar()

#实例化一个全局opener

handler=urllib.request.HTTPCookieProcessor(cookie)

opener=urllib.request.build_opener(handler)

# 获取cookie

r=opener.open('https://www.hao123.com/')

# 访问主页 自动带着cookie信息

result = opener.open('https://www.hao123.com/')

result.status

print (result.read())

#------------------------------------------------------------------------------

import requests

#对于cookies格式的转化,提供了三个工具方法:

#requests.utils.dict_from_cookiejar(cj)

#requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True)

#requests.utils.add_dict_to_cookiejar(cj, cookie_dict)

#工具方法:requests.cookies.RequestsCookieJar转换成字典

load_cookies = requests.utils.dict_from_cookiejar(r.cookies)

#工具方法将字典转换成RequestsCookieJar,赋值给session的cookies.

#requests.utils.cookiejar_from_dict({c.name: c.value for c in r.cookies})

requests.session.cookies=requests.utils.cookiejar_from_dict(load_cookies)

#利用requests 库

r=requests.get('https://www.hao123.com/',cookies=load_cookies)

#获取的cookies,可以用keys()和values()看内容,但本身不是字典格式,以下可以打印出字典方式查看

r.cookies

print ({c.name: c.value for c in r.cookies})
#12 使用cookie2

import urllib.request, urllib.parse, urllib.error
import http.cookiejar

LOGIN_URL = 'http://acm.hit.edu.cn/hoj/system/login'
values = {'user': '******', 'password': '******'} # , 'submit' : 'Login'
postdata = urllib.parse.urlencode(values).encode()
user_agent = r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'
headers = {'User-Agent': user_agent, 'Connection': 'keep-alive'}

cookie_filename = 'cookie.txt'
cookie = http.cookiejar.MozillaCookieJar(cookie_filename)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)

request = urllib.request.Request(LOGIN_URL, postdata, headers)
try:
    response = opener.open(request)
    page = response.read().decode()
    # print(page)
except urllib.error.URLError as e:
    print(e.code, ':', e.reason)

cookie.save(ignore_discard=True, ignore_expires=True)  # 保存cookie到cookie.txt中
print(cookie)
for item in cookie:
    print('Name = ' + item.name)
    print('Value = ' + item.value)

get_url = 'http://acm.hit.edu.cn/hoj/problem/solution/?problem=1'  # 利用cookie请求访问另一个网址
get_request = urllib.request.Request(get_url, headers=headers)
get_response = opener.open(get_request)
print(get_response.read().decode())
# print('You have not solved this p

'''
Note:
1. 直接open http://acm.hit.edu.cn/hoj/problem/solution/?problem=1页面不知道去哪了,根本不是直接用浏览器登录后的界面!用cookie登录就可以正常访问,html代码中会有一句话you have not solved this problem,因为我没做这道题。
2. 原理:创建一个带有cookie的opener,在访问登录的URL时,将登录后的cookie保存下来,然后利用这个cookie来访问其他网址。查看登录之后才能看到的信息。[python 3.3.2 爬虫记录]
重复使用cookie登录
上面代码中我们保存cookie到文件中了,下面我们可以直接从文件导入cookie进行登录,不用再构建包含用户名和密码的postdata了
'''

import urllib.request, urllib.parse, urllib.error
import http.cookiejar

cookie_filename = 'cookie.txt'
cookie = http.cookiejar.MozillaCookieJar(cookie_filename)
cookie.load(cookie_filename, ignore_discard=True, ignore_expires=True)
print(cookie)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)

get_url = 'http://acm.hit.edu.cn/hoj/problem/solution/?problem=1'  # 利用cookie请求访问另一个网址
get_request = urllib.request.Request(get_url)
get_response = opener.open(get_request)
print(get_response.read().decode())



'''
用cookie登陆伯乐在线
'''

import urllib.request, urllib.parse, urllib.error
import http.cookiejar

LOGIN_URL = 'http://www.jobbole.com/wp-admin/admin-ajax.php'
get_url = 'http://www.jobbole.com/'  # 利用cookie请求访问另一个网址

values = {'action': 'user_login', 'user_login': '*****', 'user_pass': '******'}
postdata = urllib.parse.urlencode(values).encode()
user_agent = r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'
headers = {'User-Agent': user_agent}

cookie_filename = 'cookie_jar.txt'
cookie_jar = http.cookiejar.MozillaCookieJar(cookie_filename)
handler = urllib.request.HTTPCookieProcessor(cookie_jar)
opener = urllib.request.build_opener(handler)

request = urllib.request.Request(LOGIN_URL, postdata, headers)
try:
    response = opener.open(request)
    # print(response.read().decode())
except urllib.error.URLError as e:
    print(e.code, ':', e.reason)

cookie_jar.save(ignore_discard=True, ignore_expires=True)  # 保存cookie到cookie.txt中
for item in cookie_jar:
    print('Name = ' + item.name)
    print('Value = ' + item.value)

get_request = urllib.request.Request(get_url, headers=headers)
get_response = opener.open(get_request)
print('个人主页' in get_response.read().decode())


'''登录知乎'''

[python] view plain copy print?
#!/usr/bin/env python  
# -*- coding: utf-8 -*-  
""" 
__author__ = 'pi' 
__email__ = 'pipisorry@126.com' 
"""  
import urllib.request  
import urllib.parse  
import urllib.error  
import http.cookiejar  
  
LOGIN_URL = r'https://uis.uestc.edu.cn/amserver/UI/Login'  # 登录教务系统的URL  
get_url = 'http://eams.uestc.edu.cn/eams/teach/grade/course/person.action'  # 利用cookie请求访问另一个网址  
  
values = {'IDToken1': '201106******', 'IDToken2': '***********'}  
postdata = urllib.parse.urlencode(values).encode()  
headers = {  
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'}  
  
cookie_filename = 'cookie_jar.txt'  
cookie_jar = http.cookiejar.MozillaCookieJar(cookie_filename)  
handler = urllib.request.HTTPCookieProcessor(cookie_jar)  
opener = urllib.request.build_opener(handler)  
  
request = urllib.request.Request(LOGIN_URL, postdata, headers)  
try:  
    response = opener.open(request)  
    # print(response.read().decode())  
except urllib.error.URLError as e:  
    print(e.code, ':', e.reason)  
  
cookie_jar.save(ignore_discard=True, ignore_expires=True)  # 保存cookie到cookie.txt中  
for item in cookie_jar:  
    print('Name = ' + item.name)  
    print('Value = ' + item.value)  
  
get_request = urllib.request.Request(get_url, headers=headers)  
get_response = opener.open(get_request)  
print(get_response.read().decode())  


# 代码来源:http://blog.csdn.net/pipisorry/article/details/47948065

 

本文转载自:

粉丝 0
博文 13
码字总数 2668
作品 0
成都
私信 提问
笔记 App 领导者——印象笔记

一直以来,我都认为用纸笔记笔记是一种非常有情怀的方式,有一种掌握知识的踏实感。 但是,当到了大学,我有无数种类型的大大小小的知识都需要整理归纳,而不像高中不仅仅局限于数学、英语、...

沉思CONTEMPLATE
2017/11/03
0
0
笔记 App 领导者——印象笔记

一直以来,我都认为用纸笔记笔记是一种非常有情怀的方式,有一种掌握知识的踏实感。 但是,当到了大学,我有无数种类型的大大小小的知识都需要整理归纳,而不像高中不仅仅局限于数学、英语、...

沉思CONTEMPLATE
2017/11/03
0
0
python爬虫笔记——beautifulsoup篇补充

今天工作原因需要用到爬虫,发现之前的代码有部分不可行了;因为先前用的是python2,但我在公司电脑上装的是python3;翻看先前的代码思路,也发现有些地方比较模糊,所以写个补充篇。 首先,...

徐胥
2018/10/30
0
0
python资料全集

python: 微信公众号开发小记——2.80端口上的服务 python: 微信公众号开发小记——3.接入三方登录 使用python编写一个壁纸网站的简单爬虫 python: python List 用法 Python 中各个时间复杂度...

d_watson
2016/04/15
185
0
python 库安装方法及常用库

python库安装方法: 方法一:setpu.py 1.下载库压缩包,解压,记录下路径::/*/……/ 2.运行cmd,切换到:/*/……/目录下 3.运行setup.py build 4.然后输入python,进入python模块,验证是否...

技术花妞妞
2017/10/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.1K
14
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
38
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部