urllib库中常见的类和方法

 

from urllib.request import urlopenfrom http.client import HTTPResponse

response = urlopen(‘http://www.baidu.com‘)# http.client.HTTPResponse对象print(type(response))

with response:    print(1,response.status)    print(2,response.reason)    print(3,response.geturl())    print(4,response.info()) # headers    print(5,response.read())# urlopen 只能传递url和data,但是不能构造HTTP请求,所以Request类来实现

# 初始化方法,构造一个请求对象 可以添加一个headers字典,data参数决定是GET或者POST# add_header(key,value)也可以为headers中增加一个键值对
from urllib.request import Request,urlopenimport randomurl = ‘http://www.bing.com‘ua_list= [ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11 ","Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50","Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11" ]ua = random.choice(ua_list)req = Request(url) # 返回<class ‘urllib.request.Request‘>类req.add_header(‘User-agent‘,ua)print(‘type_req‘,type(req))# 返回<class ‘http.client.HTTPResponse‘>类

response = urlopen(req,timeout=20)print(type(response))

with response:    print(1,response.status,response.getcode(),response.reason)    print(2,response.geturl())    print(3,response.info())#response的headers    print(4,response.read())print(5,req.get_header(‘User-agent‘))print(6,‘user-agent‘.capitalize())
# urllib.parse 模块from urllib import parseu = {    ‘url‘:‘http://www.baidu.com‘,    ‘p_url‘:‘http://www.baidu.com‘}x = parse.urlencode(u)print(x)

u = parse.urlencode({‘wd‘:‘中国‘}) # 编码print(u)url = "https://www.baidu.com/s?{}".format(u)print(url)print(‘中国‘.encode(‘utf-8‘))

print(parse.unquote(u)) # 解码print(parse.unquote(url))

需求:通过关键字在bing中搜索,返回结果保存在html文件中
from urllib.request import Request,urlopenfrom urllib.parse import urlencodeimport randomkeyword = input("请输入关键字")data = urlencode({‘q‘:keyword})base_url = ‘http://cn.bing.com/search‘url = ‘{}?{}‘.format(base_url,data)print(url)ua_list= [ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11 ","Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50","Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11" ]ua = random.choice(ua_list)req = Request(url,headers={‘User-agent‘:ua})response = urlopen(req)with response:    with open(‘1.html‘,‘wb‘) as f:        f.write(response.read())print("success")
# POST方法from urllib.request import Request,urlopenfrom urllib.parse import urlencodeimport simplejsonimport randomua_list= [ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11 ","Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50","Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11" ]ua = random.choice(ua_list)req = Request(‘http://httonin.org/post‘)req.add_header(‘User-agent‘,ua)data = urlencode({‘name‘:‘张三,@=/&*‘,‘age‘:‘6‘})print(data)res1 = urlopen(req,data=‘name=张三,@=/&*,&age=6‘.encode())# 不做url编码res2 = urlopen(req,data=data.encode())#POST方法,Form提交数据# with res1:#     print(res1.read())with res2:    print(res2.read())
# 豆瓣https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=rank&page_limit=20&page_start=0from urllib.request import Request,urlopenfrom urllib.parse import urlencodeimport random

ua_list= [ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11 ","Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50","Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11" ]ua = random.choice(ua_list)url = ‘https://movie.douban.com/explore#!‘req = Request(url)req.add_header(‘User-agent‘,ua)

data = urlencode({    ‘type‘:‘movie‘,    ‘tag‘:‘热门‘,    ‘sort‘:‘rank‘,    ‘page_limit‘:8,    ‘page_start‘:10})# POST 方法res = urlopen(req,data=data.encode())with res:    print(res._method)    print(1,res.read().decode())# GET方法with urlopen(‘{}?{}‘.format(url,data)) as res:    print(res._method)    print(2,res.read().decode())
from urllib.request import Request,urlopenimport sslimport randomua_list= [ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11 ","Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50","Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11" ]ua = random.choice(ua_list)request = Request(‘https://www.12306.cn/mormhweb/‘)request.add_header(    ‘User-agent‘,ua)# 接受不受信任证书context = ssl._create_unverified_context()res = urlopen(request,context= context)with res:    print(res._method)    print(res.geturl())    print(res.read().decode())

标准库urllib缺少关键功能,非标准第三方库提供了比如连接池管理
import urllib3import randomurl = ‘https://movie.douban.com‘ua_list= [ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11 ","Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50","Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11" ]ua = random.choice(ua_list)with urllib3.PoolManager() as http:    response = http.request(‘GET‘,url,headers={‘User-agent‘:ua})    print(type(response)) # <class ‘urllib3.response.HTTPResponse‘>类    print(response.status,response.reason)    print(response.headers)    print(response.data)

requests库使用了urllib3库,提供可友好的api
import requestsimport randomurl = ‘https://movie.douban.com‘ua_list= [ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11 ","Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50","Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11" ]ua = random.choice(ua_list)response = requests.request(‘GET‘,url,headers={‘User-Agent‘:ua})with response:    print(type(response))    print(response.url)    print(response.status_code)    print(response.request.headers)# 请求头    print(response.headers)# 响应头    print(response.text)    with open(‘movie.html‘,‘w‘,encoding=‘utf-8‘) as f:        f.write(response.text)requests默认使用了Session对象,是为了多次与服务器交互保留会话信息:
# 直接使用sessionimport requestsimport randomua_list= [ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11 ","Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50","Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11" ]ua = random.choice(ua_list)urls = [‘https://www.baidu.com‘,‘https://www.baidu.com‘]session = requests.Session()print(type(session))with session:    for url in urls:        response = session.get(url,headers={‘User-agent‘:ua})        with response:            print(type(response)) # <class ‘requests.models.Response‘>类            print(response.url)            print(response.status_code)            print(‘headers‘,response.request.headers)            print(‘cookie‘,response.cookies)            print(response.text[:20])



原文地址:https://www.cnblogs.com/qyan-blog/p/12153645.html

时间: 2024-10-03 17:24:37

urllib库中常见的类和方法的相关文章

swift标准库中常见的55个协议。

swift标准库中常见的55个协议. 从协议名结尾字面上我们可以将Protocol分为able.Type.Convertible 三类 从功能角度上来讲的话可以总结为: 功能添加型(able结尾) "可以做什么?" 举例: Hashable: 给你的实例添加一个生成哈希值的功能. Equatable: 给你的实例添加一个判断相等的功能. 2.类型对比型(Type结尾) "这个实例是什么?" 举例: CollectionType: swift中所有的集合类型都要遵守的

web爬虫讲解—urllib库中使用xpath表达式—BeautifulSoup基础

在urllib中,我们一样可以使用xpath表达式进行信息提取,此时,你需要首先安装lxml模块,然后将网页数据通过lxml下的etree转化为treedata的形式 urllib库中使用xpath表达式 etree.HTML()将获取到的html字符串,转换成树形结构,也就是xpath表达式可以获取的格式 #!/usr/bin/env python # -*- coding:utf8 -*- import urllib.request from lxml import etree #导入htm

java中常用的包、类、以及包中常用的类、方法、属性-----io包

由于最近有需要,所以下面是我整理的在开发中常用的包.类.以及包中常用的类.方法.属性:有需要的看看 java中常用的包.类.以及包中常用的类.方法.属性 常用的包 java.io.*; java.util.*; java.lang.*; java.math.*; java.sql.*; java.text.*; java.awt.*; javax.swing.*;   包名 接口 类 方法 属性 java.io.*; java.io.Serializable实现序列化 java.io.Buffe

C# 中的 ConfigurationManager类引用方法

在System.Configuration命名空间下死活找不到ConfigurationManager类,执行程序便报错.遇到这种情况,需要对项目添加引用.方法如下: 右键references->add references->assemblies下的framework->勾选System.Configuration->ok 如图所示. 转载请注明:康瑞的部落 ? C# 中的 ConfigurationManager类引用方法 C# 中的 ConfigurationManager类

参考C++STL标准库中对了的使用方法

http://www.cppblog.com/zhenglinbo/archive/2012/09/18/191170.html 参考:http://www.cppblog.com/zhenglinbo/archive/2012/09/18/191170.html 当然是使用c++中的STL 的queue啦.下面简要介绍一下使用方法. 1 准备工作 头文件 #include<queue> 2 声明和定义的方法.STL的队列是泛型模板,支持任何内置和构造类型. 比如对于刚才那个牛奶问题.我把状态

转:java中包、类、方法、属性、常量的命名规则

必须用英文,不要用汉语拼音 1:包(package):用于将完成不同功能的类分门别类,放在不同的目录(包)下,包的命名规则:将公司域名反转作为包名.比如www.sohu.com 对于包名:每个字母都需要小写.比如:com.sohu.test;该包下的Test类的全名是:com.sohu.Test.java . 如果定义类的时候没有使用package,那么java就认为我们所定义的类位于默认包里面(default package). 2:类:首字母大写,如果一个类由多个单词构成,那么每个单词的首字

Java中各种(类、方法、属性)访问修饰符与修饰符的说明

类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 名称 说明 备注 public 可以被本项目的所有类访问(使用),其他项目若想使用本项目中的类,必须将本项目打包为jar包,然后加入到classpath中 public类必须定义在和类名相同的同名文件中 (default) 只能被同一个包中的类访问(使用) 默认的访问权限,可以省略此关键字,可以定义在和public类的同一个文件中 修饰符 名称

Java基础(43):Java中的Object类与其方法(转)

Object类 java.lang.Object java.lang包在使用的时候无需显示导入,编译时由编译器自动导入. Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类. Object类是Java中唯一没有父类的类. 其他所有的类,包括标准容器类,比如数组,都继承了Object类中的方法. Object类中的方法 构造方法:public Object() 文档中的类概览: Java中的每个类都具有定义在Object类中的这些方法. protected Object cl

JAVA中的反射中加载类的方法

反射:加载类的方法有三种, 1.用Class.forName("类名")方法来调用; 2.类名.class得到 3.用对象.getClass()得到 package com.ma.reflection; import org.junit.Test; import com.ma.bean.UserBean; public class Demo1 { /** * 反射:加载类的方法 */ @Test public void test1(){ //1.用Class.forName("