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 ...
随机推荐
- CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020)
CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020)1. 目标检测:FCOS(CVPR 2019)目标检测算法FCOS(FCOS: ...
- 第四代自动泊车从APA到AVP技术
第四代自动泊车从APA到AVP技术 前言 自动泊车是指汽车自动泊车入位不需要人工控制,系统能够自动帮你将车辆停入车位,在倒车入库中可谓是驾驶者的一项利器.当我们找到一个理想的停车地点,只需轻轻启动按钮 ...
- 适用于Windows和Linux的Yolo-v3和Yolo-v2(下)
适用于Windows和Linux的Yolo-v3和Yolo-v2(下) 如何训练(检测自定义对象): (培养老YOLO V2 yolov2-voc.cfg,yolov2-tiny-voc.cfg,yo ...
- ffmpeg architecture(中)
ffmpeg architecture(中) 艰苦学习FFmpeg libav 您是否不奇怪有时会发出声音和视觉? 由于FFmpeg作为命令行工具非常有用,可以对媒体文件执行基本任务,因此如何在程序中 ...
- Java 反射编程(上)
文章目录 反射的泛型就是用`? `来描述 反射与类的操作 (取得父类信息) 取得父类信息 1. 获得本类的包名称: 2. 取得父类的Class 对象 3. 取得父类接口 案例: 使用上述方法 反射与类 ...
- 【C++】秒级时间戳,毫秒级时间戳
时间戳,秒级 测试代码: #include <iostream> #include <time.h> #include <windows.h> using name ...
- StackOverflow上面 7个最好的Java答案
StackOverflow发展到目前,已经成为了全球开发者的金矿.它能够帮助我们找到在各个领域遇到的问题的最有用的解决方案,同时我们也会从中学习到很多新的东西.这篇文章是在我们审阅了StackOver ...
- 使用jsonp实现跨源请求
jsonp 该技术用来实现跨源请求,即向协议.域名.端口号不同的服务器发送请求 通过使用 script 标签的 src 向服务器发送GET请求http://xxx/xxx?callback=callb ...
- 从ReentrantLock看AQS (AbstractQueuedSynchronizer) 运行流程
从ReentrantLock看AQS (AbstractQueuedSynchronizer) 运行流程 概述 本文将以ReentrantLock为例来讲解AbstractQueuedSynchron ...
- 2.QT浏览器控件设置“透明颜色”
使用样式表或者设置背景颜色,使用 background-color:transparent 但,使用透明的颜色是不可行的: QColor(255,0,0,0)