Urllib2库丨Python爬虫基础入门系列(12)

article/2025/10/29 14:56:12

提示:文末有福利!最新Python爬虫资料/学习指南>>戳我直达

文章目录

  • 前言
  • Urllib2库
      • 学习目的
      • urlopen
      • GET请求方式
      • 利用urllib2.Request类,添加Header信息
      • POST请求方式
        • 抓取招聘信息
        • 思考一下
      • 小结
  • 总结


前言

Urllib2库
urllib2是python2.7自带的模块(不需要下载),它支持多种网络协议,比如 FTP、HTTP、HTTPS等
urllib2在python3.x中被改为urllib.request


话不多说,开始学习
在这里插入图片描述

Urllib2库

学习目的

利用urllib2提供了一个接口 urlopen函数

urllib2 官方文档

https://docs.python.org/2/library/urllib2.html

urlopen

urlopen(url, data, timeout,....)

(1)第一个参数url即为URL,第一个参数URL是必须要传送的

(2)第二个参数data是访问URL时要传送的数据,data默认为空None

(3)第三个timeout是设置超时时间,timeout默认为 60s(socket._GLOBAL_DEFAULT_TIMEOUT)

GET请求方式

以抓取 http://www.itcast.cn为例

import urllib2
response = urllib2.urlopen('http://www.itcast.cn/')
data = response.read()
print data
print response.code

保存成 demo.py,进入该文件的目录,执行如下命令查看运行结果,感受一下。

python demo.py

Urllib2库的基本使用 - 图1

利用urllib2.Request类,添加Header信息

利用urllib2.Request方法,可以用来构造一个Http请求消息

help(urllib2.Request)

Urllib2库的基本使用 - 图2

正则:headers 转dict

^(.*):\s(.*)$
"\1":"\2",
# -*- coding: utf-8 -*-
import urllib2
get_headers={'Host': 'www.itcast.cn','Connection': 'keep-alive','Pragma': 'no-cache','Cache-Control': 'no-cache','Upgrade-Insecure-Requests': '1','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',#此处是压缩算法;不便于查看,要做解压#'Accept-Encoding': 'gzip, deflate, sdch','Accept-Language': 'zh-CN,zh;q=0.8','Cookie': 'pgv_pvi=7044633600; tencentSig=6792114176; IESESSION=alive; pgv_si=s3489918976; CNZZDATA4617777=cnzz_eid%3D768417915-1468987955-%26ntime%3D1470191347; _qdda=3-1.1; _qddab=3-dyl6uh.ireawgo0; _qddamta_800068868=3-0'}
request = urllib2.Request("http://www.itcast.cn/",headers=get_headers)
#request.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36')
response = urllib2.urlopen(request)
print response.code
data = response.read()
print data

Q:为什么这两种写法都对?

A:一个headers没写,另一个写了都好使;原因是web服务器能够理解请求数据,并且没有做验证机制


POST请求方式

抓取招聘信息

http://www.lagou.com/jobs/list_?px=new&city=%E5%85%A8%E5%9B%BD#order

# -*- coding: utf-8 -*-
import urllib2
import urllib
proxy_handler = urllib2.ProxyHandler({"http" : 'http://192.168.17.1:8888'})
opener = urllib2.build_opener(proxy_handler)
urllib2.install_opener(opener)
Sum = 1
output = open('lagou.json', 'w')
for page in range(1,Sum+1): formdata = 'first=false&pn='+str(page)+'&kd='print '运行到第 (%2d) 页面' %(page)send_headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36','Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8','Accept': 'application/json, text/javascript, */*; q=0.01',' X-Requested-With': 'XMLHttpRequest'}request =urllib2.Request('http://www.lagou.com/jobs/positionAjax.json?px=new&needAddtionalResult=false',headers=send_headers)#request.add_header('X-Requested-With','XMLHttpRequest')#request.headers=send_headersrequest.add_data(formdata)print request.get_data()response = urllib2.urlopen(request)print response.coderesHtml =response.read()#print resHtmloutput.write(resHtml+'\n')
output.close()
print '-'*4 + 'end'+'-'*4

Urllib2库的基本使用 - 图3

思考一下

  • 如果要采集的是 北京>>朝阳区>>望京 地区的职位,以这个网站为例,该如何理解这个url

http://www.lagou.com/jobs/list_?px=default&city=%E5%8C%97%E4%BA%AC&district=%E6%9C%9D%E9%98%B3%E5%8C%BA&bizArea=%E6%9C%9B%E4%BA%AC#filterBox

urlencode编码/解码在线工具

# -*- coding: utf-8 -*-
import urllib2
import urllib
query = {'city':'北京','district':'朝阳区','bizArea':'望京'
}
print urllib.urlencode(query)
page =3
values = {'first':'false','pn':str(page),'kd':'后端开发',
}
formdata = urllib.urlencode(values)
print formdata

小结

Content-Length: 是指报头Header以外的内容长度,指 表单数据长度

X-Requested-With: XMLHttpRequest :表示Ajax异步请求

Content-Type: application/x-www-form-urlencoded

表示:提交的表单数据 会按照name/value 值对 形式进行编码

例如:

name1=value1&name2=value2...

name 和 value 都进行了 URL 编码(utf-8、gb2312)

在线测试字符串长度

在这里插入图片描述


总结

Urllib2库丨Python爬虫基础入门系列(12) 就到这啦,在学爬虫的老铁记得持续关注噢!阿星祝你早日修炼成为爬虫大佬!当然,如果你准备系统地学爬虫及更多Python编程技术,可戳我文末的名片,Free领取最新Python爬虫资料/免费咨询/学习规划~

戳我名片 · 领取福利

在这里插入图片描述


http://chatgpt.dhexx.cn/article/sQmn5Bnf.shtml

相关文章

Hyper-V虚拟化

第一章 Hyper-V 介绍 1-1 Hyper-V发展历史 2003 年,微软收购了一家虚拟化软件公司。2004 年推出了第一个桌面虚拟化产品Virtual PC 2004,其功能类似于VMware 工作站(work station)。由于该虚拟化产品集成在操作系统之中,所以用户可以在windo…

QNX Hypervisor管理程序

QNX Hypervisor管理程序 借助 QNX 管理程序,可以将具有不同操作系统,不同可靠性和安全要求的多个嵌入式系统,整合到单个片上系统 (SoC) 中。可以轻松地将未修改的代码移动到最新的硬件上,只需在适当配置的hypervisor 管理程序虚拟…

怎么开启windows hypervisor platform,解决hypervisor platform消失无法安装的问题

正常的windows功能面板 我的 很好,没有安装windows hypervisor platform的机会,但是没关系(ps:此处描述有误中文名称应该是虚拟机监控程序平台) 然后cmd 或powershll 管理员身份运行 Dism /online /Get-Features 可以查看到hypervisor platform是禁用状态 ::%cd%代表的是执…

Android Studio安装常见问题详解——Android Emulator Hypervisor Driver for AMD Processors installation failed.

目录 一、问题描述二、解决方案2.1 开启CPU虚拟化2.2 禁用Hyper-V2.3 使用管理员命令行在驱动程序包中执行“silent_install.bat” 一、问题描述 新买的AMD轻薄本,在安装Android Studio时遇到问题: Android Emulator Hypervisor Driver for AMD Process…

Hypervisor之半虚拟化virtio

1 基本概念 virtio共享内存使用的是guest GPA,由guest virtio front-end驱动初始化队列的时候分配,在back-end驱动中,QVM或者QEMU将GPA转换到HVA或者HPA地址再读写数据。 virtio front-end通知back-end方式:访问doorbell寄存器触发…

VMware vSphere Hypervisor (ESXi) 7.0U3g安装

VMware vSphere Hypervisor“ESXi” 7.0U3g 安装 一、准备工作1、查看支持ESXI7.0U3的CPU型号;2、下载将镜像制作成安装盘的软件;3、注册vmware账号,下载ESXI7.0U3镜像; 二、安装VMware vSphere Hypervisor (ESXi) 7.0U3g三、配置…

Vmware vSphere hypervisor 虚拟化软件安装

目录 一、概述 1.1.什么是 vSphere Hypervisor? 二、U盘启动制作 2.1. ultraiso安装完成后打开文件 2.2.选择我们下载好的虚拟化软件ios 2.3.写入映像文件 2.4.写入硬盘映像,驱动器选择插入的U盘 三、 Vmware vSphere hypervisor安装 四、虚拟机…

Hypervisor---虚拟化技术简易说明

Hypervisor,虚拟机监视器(英语:virtual machine monitor,缩写为 VMM),是一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。 被Hypervisor用来执行一个或多个虚拟机器…

hypervisor - qnx

按照definition of Goldberg (1973), Hypervisor – Wikipedia: qnx hypervisor is type 2 QNX considers its hypervisor to be a type 1 (although it is a type 2)

什么是虚拟机管理程序hypervisor,什么是hypervisor type 1, hypervisor type 2

服务器虚拟化目前是IT界的一个热门话题。它的受欢迎程度和使用率一直在增长,尤其是在企业环境中。使虚拟化成为可能的是所谓的hypervisor 管理程序。服务器虚拟化允许不同的操作系统在一台服务器上运行单独的应用程序,同时仍使用相同的物理资源。这些虚拟…

了解以及区分物理机,虚拟机(hypervisor/VMM) 和 容器(Docker)的适用场景

了解以及区分物理机,虚拟机hypervisor/VMM 和 容器Docker的适用场景 Abbreviations物理机和虚拟机以及容器的区别动机motivation:为什么要有虚拟机物理机:虚拟机容器 虚拟机的种类以及他们的本质区别虚拟化方式虚拟机类型docker技术传统计算机体系结构虚…

虚拟化与hypervisor

文章目录 虚拟化HypervisorHypervisor分类Hypervisor优点Container vs HypervisorHypervisorContainer 虚拟化 虚拟化通过将公司的物理资源视为可以动态分配虚拟资源的池,从而提高了IT资源的利用率。 虚拟化涉及从物理思维到逻辑思维的转变,将IT资源视…

Hypervisor 简介

单词解释 Hypervisor:超级监督者,管理程序 虚拟化技术 概念 一种运行在基础物理服务器和操作系统之间的中间软件层,可以访问服务器上包括磁盘和内存在内的所有物理设备。Hypervisor协调着这些硬件资源的访问,以及各个虚拟机之间…

Hypervisor技术

KVM介绍 KVM内置于Linux,是内核模块;KVM可以直接利用Linux来做一些在xen中需要利用hypervisor来做的事情,比如任务调度,内存管理等等。所以相比之下,KVM更轻量,更易管理,并且版本更新也可以随着…

hypervisor详解

hypervisor:一种运行在物理服务器和操作系统之间的中间层软件,可以允许多个操作系统和应用共享一套基础物理硬件。可以将hypervisor看做是虚拟环境中的“元”操作系统,可以协调访问服务器上的所有物理设备和虚拟机,所以又称为虚拟…

Hypervisor简介

从头开始了解和使用Hypervisor(第4部分) - 嘶吼 RoarTalk – 回归最本质的信息安全,互联网安全新媒体,4hou.com 根据 Hypervisor 的不同类型,我们将虚拟化分为I 型和 II 型两种。 I 型虚拟化,也被称为裸金属虚拟化,Hy…

什么是Hypervisor

根据维基百科:“Hypervisor 或者virtual machine monitor (VMM)是创造并且运行虚拟机的软件、固件、或者硬件”。 通俗来讲,Hypervisor是一种将操作系统与硬件抽象分离的方法,以达到host machine的硬件能同时运行一个至多个虚拟机作为guest …

虚拟化技术介绍 hypervisor简介

什么是虚拟化? 虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障…

Hypervisor

1 什么是Hypervisor? Hypervisor是一种系统软件,它充当计算机硬件和虚拟机之间的中介,负责有效地分配和利用由各个虚拟机使用的硬件资源,这些虚拟机在物理主机上单独工作,因此,Hypervisor也称为虚拟机管理…

2020-12-01 剖析 Linux hypervisor

hypervisor:一种运行在物理服务器和操作系统之间的中间层软件,可以允许多个操作系统和应用共享一套基础物理硬件。可以将hypervisor看做是虚拟环境中的“元”操作系统,可以协调访问服务器上的所有物理设备和虚拟机,所以又称为虚拟…