urllib的使用和进阶——urllib.request
urllib是python中常用的一个基本库,以后的许多库包括一些框架如Scrapy都是建立在这个库的基础上的。在urllib中,为用户提供了一系列用于操作URL的功能,其提供的功能主要就是利用程序去执行各种HTTP请求。这当中,最常使用的就是urllib.request模块中的urlopen。
如果要模拟浏览器完成特定功能,需要把请求伪装成浏览器。伪装的方法是先监控浏览器发出的请求,再根据浏览器的请求头来伪装,User-Agent头就是用来标识浏览器的。
官方给出的方法原型是这样的:
def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
*, cafile=None, capath=None, cadefault=False, context=None):
一般常用的为以下三个部分:
url: 需要打开的网址
data:Post提交的数据
timeout:设置网站的访问超时时间
但是urlopen也有很大的缺陷,就是他没有办法进行对爬虫进行伪装,也就是无法设置请求头,这就需要urllib中的另外一个库——request,request库提供了对于请求头的使用,用来进行对爬虫的伪装,一般来说,我们会设置几个不同的Headers来进行伪装,用来改变为不同的用户(在自我学习阶段,这样可以使要求不严格的spider减少对ip的改变)。下面的代码基本实现了这种方式的基本操作,并且对于urlopen和request的常用的方法进行了罗列(以www.bing.com为例)。
1 '''
2 @Description: urllib 的使用和进阶
3 @Version: 1.0
4 @Autor: Montoin Yan
5 @Date: 2020-02-01 17:55:43
6 @LastEditors : Montoin Yan
7 @LastEditTime : 2020-02-01 19:46:27
8 '''
9
10 #导入urllib中的resqust模块,引用urlopen
11 #urlopen方法用于发送请求,并将请求到的结果储存在文件中。缺点是不能使用header的引用
12 #因此引用Request库进行请求头的引用,方便伪装来逃避反扒措施
13 from urllib.request import urlopen,Request
14 import random
15 #当查询到response中的type时,可以按照以下格式进行具体方法的查询
16 from http.client import HTTPResponse
17
18 url = "http://www.bing.com"
19 #设置多个请求头,防止被反扒措施进行拦截
20 ua_list = [
21 "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0",
22 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.29 Safari/537.36",
23 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362",
24 "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"
25 ]
26 #随机pick one
27 ua = random.choice(ua_list)
28 request = Request(url,headers={
29 'User-agent':ua
30 })
31 # response = urlopen(url,timeout=3) #GET
32 response = urlopen(request,timeout=3)
33
34 print(response.closed) #可以使用closed,说明是类文件对象,
35
36 with response:
37 print(type(response)) #检查response的对应的方法类型
38 print(response.status) #检查response的状态
39 print(response.reason) #检查返回结果是否成功
40 print(response._method) #检查当前所对应的传输方法 即GET或者POST
41 # print(response.info()) #获取Headers
42 # print(response.read()) #读取并打印获取到的文件的内容
43 print(response.geturl()) #返回网页执行真正的url,即当遇到301 302的时候,页面会从当前页面自动跳转到location页面,具体location地址可以在浏览器的开发者模式中进行查看urllib是支持自动跳转的
44
45 print(request.get_method()) #获取request中传输的方法,即GET或者POST
46 print(request.get_header("User-agent")) #获取当前使用的请求头
47 print(response.closed) #关闭成功,说明response支持上下文管理协议
结果如下所示,可进行参考:

urllib的使用和进阶——urllib.request的更多相关文章
- 爬虫新手学习2-爬虫进阶(urllib和urllib2 的区别、url转码、爬虫GET提交实例、批量爬取贴吧数据、fidder软件安装、有道翻译POST实例、豆瓣ajax数据获取)
1.urllib和urllib2区别实例 urllib和urllib2都是接受URL请求相关模块,但是提供了不同的功能,两个最显著的不同如下: urllib可以接受URL,不能创建设置headers的 ...
- Jmeter性能测试之进阶Java request的使用
在IDE中引用Jmeter的安装目录lib/ext中两个文件ApacheJMeter_core.jar和ApacheJMeter_java.jar Java request的类需要继承Abstract ...
- python中urllib, urllib2,urllib3, httplib,httplib2, request的区别
permike原文python中urllib, urllib2,urllib3, httplib,httplib2, request的区别 若只使用python3.X, 下面可以不看了, 记住有个ur ...
- Python Spider - urllib.request
import urllib.request import urllib.parse import json proxy_support = urllib.request.ProxyHandler({' ...
- Python urllib Request 用法
转载自:https://blog.csdn.net/ywy0ywy/article/details/52733839 python2.7 httplib, urllib, urllib2, reque ...
- 爬虫之urllib.request基础使用(一)
urllib模块 urllib模块简介: urllib提供了一系列用于操作URL的功能.包含urllib.request,urllib.error,urllib.parse,urllib.robotp ...
- Python 3.X 要使用urllib.request 来抓取网络资源。转
Python 3.X 要使用urllib.request 来抓取网络资源. 最简单的方式: #coding=utf-8 import urllib.request response = urllib. ...
- urllib基本使用 urlopen(),Request
urllib包含的常用模块:import urllib.request # 打开和读取url请求import urllib.error # 异常处理模块import urllib.parse # ur ...
- 爬虫入门【1】urllib.request库用法简介
urlopen方法 打开指定的URL urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, ca ...
随机推荐
- .NET Core Web API使用HttpClient提交文件的二进制流(multipart/form-data内容类型)
需求背景: 在需要通过服务端请求传递文件二进制文件流数据到相关的服务端保存时,如对接第三方接口很多情况下都会提供一个上传文件的接口,但是当你直接通过前端Ajax的方式将文件流上传到对方提供的接口的时候 ...
- LR: GLU-Net: Global-Local Universal Network for Dense Flow and Correspondences
Abstract 在图像中简历稠密匹配是很重要的任务, 包括 几何匹配,光流,语义匹配. 但是这些应用有很大的挑战: 大的平移, 像素精度, 外观变化: 当前是用特定的网络架构来解决一个单一问题. 我 ...
- GPU自动调度卷积层
GPU自动调度卷积层 本文对GPU使用自动调度程序. 与依靠手动模板定义搜索空间的基于模板的autotvm不同,自动调度程序不需要任何模板.用户只需要编写计算声明,无需任何调度命令或模板.自动调度程序 ...
- ARM系统架构
ARM系统架构 一.ARM概要 ARM架构,曾称进阶精简指令集机器(Advanced RISC Machine)更早称作Acorn RISC Machine,是一个32位精简指令集(RISC)处理器架 ...
- 旷视MegEngine数据加载与处理
旷视MegEngine数据加载与处理 在网络训练与测试中,数据的加载和预处理往往会耗费大量的精力. MegEngine 提供了一系列接口来规范化这些处理工作. 利用 Dataset 封装一个数据集 数 ...
- CUDA运行时 Runtime(一)
CUDA运行时 Runtime(一) 一. 概述 运行时在cudart库中实现,该库通过静态方式链接到应用程序库cudart.lib和libcudart.a,或动态通过cuda ...
- RGB Color Codes Chart
RGB Color Codes Chart RGB颜色空间 RGB颜色空间或RGB颜色系统,从红色.绿色和蓝色的组合中构造所有颜色. 红色.绿色和蓝色各使用8位,它们的整数值从0到255.这使得256 ...
- VB 老旧版本维护系列---读取xml某个节点的值
读取xml某个节点的值 '定义xml字符串内容地址 Dim xmlFileStr As String = "" '定义所需读取节点的名称 Dim readNodeName As S ...
- Activiti Exploer工作流控制台使用指南!使用Activiti Explorer定义部署执行工作流
Activiti Explorer简介 Activiti Explorer: Activiti控制台,是一个web应用程序 从Activiti的官方网站下载Activiti的压缩zip文件时,Acti ...
- 「题解」NWRRC2017 Joker
本文将同步发布于: 洛谷博客: csdn: 博客园: 简书. 题目 题目链接:洛谷 P7028.gym101612J. 题意概述 有一个长度为 \(n\) 的数列,第 \(i\) 个元素的值为 \(a ...