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的更多相关文章

  1. 爬虫新手学习2-爬虫进阶(urllib和urllib2 的区别、url转码、爬虫GET提交实例、批量爬取贴吧数据、fidder软件安装、有道翻译POST实例、豆瓣ajax数据获取)

    1.urllib和urllib2区别实例 urllib和urllib2都是接受URL请求相关模块,但是提供了不同的功能,两个最显著的不同如下: urllib可以接受URL,不能创建设置headers的 ...

  2. Jmeter性能测试之进阶Java request的使用

    在IDE中引用Jmeter的安装目录lib/ext中两个文件ApacheJMeter_core.jar和ApacheJMeter_java.jar Java request的类需要继承Abstract ...

  3. python中urllib, urllib2,urllib3, httplib,httplib2, request的区别

    permike原文python中urllib, urllib2,urllib3, httplib,httplib2, request的区别 若只使用python3.X, 下面可以不看了, 记住有个ur ...

  4. Python Spider - urllib.request

    import urllib.request import urllib.parse import json proxy_support = urllib.request.ProxyHandler({' ...

  5. Python urllib Request 用法

    转载自:https://blog.csdn.net/ywy0ywy/article/details/52733839 python2.7 httplib, urllib, urllib2, reque ...

  6. 爬虫之urllib.request基础使用(一)

    urllib模块 urllib模块简介: urllib提供了一系列用于操作URL的功能.包含urllib.request,urllib.error,urllib.parse,urllib.robotp ...

  7. Python 3.X 要使用urllib.request 来抓取网络资源。转

    Python 3.X 要使用urllib.request 来抓取网络资源. 最简单的方式: #coding=utf-8 import urllib.request response = urllib. ...

  8. urllib基本使用 urlopen(),Request

    urllib包含的常用模块:import urllib.request # 打开和读取url请求import urllib.error # 异常处理模块import urllib.parse # ur ...

  9. 爬虫入门【1】urllib.request库用法简介

    urlopen方法 打开指定的URL urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, ca ...

随机推荐

  1. bind,call,apply的区别

    function cat(){}cat.prototype={ food:"fish", say: function(){ alert("I love "+th ...

  2. 编译原理-DFA的化简(最小化)

    对于给定的DFA    M,寻找一个状态数比M小的DFA    M'使得L(M)=L(M') 1.状态的等价性: 假设s和t为M的两个状态 ①若分别从状态s和状态t出发都能读出某个字α而停止于终态,则 ...

  3. 用java实现图书管理系统。

    图书管理系统. 一.项目设计到的知识 1.MVC设计模式思想(分包) >项目分包 >MVC简单介绍 2.GUI(图形化界面) 3.JDBC连接MySql数据库 4.I/O流 5.面向对象思 ...

  4. MySQL必知必会复习笔记(1)

    MySQL必知必会笔记(一) MySQL必知必会是一本很优秀的MySQL教程书,并且相当精简,在日常中甚至能当成一本工作手册来查看.本系列笔记记录的是:1.自己记得不够牢的代码:2.自己觉得很重要的代 ...

  5. VNC 相关

    vncserver启动报错root A VNC server is already running as :1 [root@42 ~]# service vncserver startStarting ...

  6. Spring Boot 实战:如何自定义 Servlet Filter

    1.前言 有些时候我们需要在 Spring Boot Servlet Web 应用中声明一些自定义的 Servlet Filter来处理一些逻辑.比如简单的权限系统.请求头过滤.防止 XSS 攻击等. ...

  7. 玩转STM32MP157-开发环境搭建

    (一)STM32MP 1.什么是 STM32MPU STM32MPU是 ST 推出的 Cortex-A7 + Cortex-M4 多核异构处理器 STM32MPU151 是单核 A7+M4,.STM3 ...

  8. 『无为则无心』Python基础 — 14、Python流程控制语句(while循环语句)

    目录 1.什么是循环结构 2.while循环 (1)while循环的语法 (2)while循环的应用 3.while语句的死循环 4.break和continue 5.while循环嵌套 (1)应用场 ...

  9. IDEA打开文件时,关闭SonarLint自动扫描

    操作步骤 1 打开 Preferences mac快捷键:command+, 2 搜索 SonarLint,取消勾选Automatically trigger analysis,保存设置

  10. 15、linux文件、目录的权限及如何改变权限(root用户不受任何权限的限制)

    15.1.linux普通文件的读.写.执行权限说明: r:读,表示具有读取\阅读文件内容的权限: w:可写,表示具有新增,修改文件内容的权限: 如果没有r配合,那么vi编辑文件会提示无法编辑(但可以强 ...