爬虫常用的 urllib 库知识点

urllib 库

urllib 库是 Python 中一个最基本的网络请求库。它可以模仿浏览器的行为向指定的服务器发送请求,同时可以保存服务器返回的数据。

urlopen()

在 Python3 的 urllib 库中,所有和网络请求的相关方法都被集中到 urllib.request 模块下了。以下是 urlopen() 方法最基本的使用方法:

from urllib import request
resp = request.urlopen(‘https://www.baidu.com‘)
print(resp.read())

上面的代码执行完毕后在终端会打印出百度首页的源代码。

urlopen() 方法可以写两个参数(常用的):

  • url:请求的 url
  • data:请求的 data,如果设置了这个值,那么将变成 post 请求

urlopen() 方法的返回值是一个 http.client.HPPTResponse 对象,这个对象是一个类文件句柄对象。有 read(size)readline()readlines() 以及 getcode() 等方法。

urlretrieve()

这个方法可以方便的将网页上的一个文件保存到本地。以下代码可以非常方便的将百度的首页下载到本地:

from urllib import request
request.urlretrieve(‘http://www.baidu.com/‘, ‘baidu.html‘)

urlencode()

若 ulr 中包含了中文或其他特殊字符,则浏览器会自动给我们进行编码。要用爬虫模拟浏览器,就需要进行手动编码,此时就要用到 urlencode() 方法来实现。这个方法可以把字典数据转换为 url 编码的数据。例如:

from urllib import parse

url = ‘https://www.baidu.com/s‘

params = {"wd": "教学设计"}
qs = parse.urlencode(params)
url = url + "?ie=UTF-8&&" + qs
print(qs)
print(url)
resp = request.urlopen(url)
print(resp.read())

parse_qs()

此方法可以将经过编码后的 ulr 参数进行解码。例如:

from urllib import parse

params = {‘name‘: ‘木易‘, ‘age‘: ‘21‘, ‘sex‘: ‘male‘}
qs = parse.urlencode(params)
result = parse.parse_qs(qs)
print(result)

urlparse() 和 urlsplit()

这两个方法用来对 url 的各个组成部分进行分割。最后可以一次性拿到全部的 url 组成部分,也可以单独拿出某个部分。例如:

from urllib import parse

url = ‘https://baike.baidu.com/item/hello%20world/85501?fr=aladdin#2_13‘

result = parse.urlparse(url)
print(result) //拿出全部
// 分别拿出各个部分
print(‘scheme:‘, result.scheme)
print(‘netloc:‘, result.netloc)
print(‘path:‘, result.path)
print(‘params:‘,result.params)  // urlsplit() 方法没有此项结果
print(‘query:‘, result.query)
print(‘fragment:‘, result.fragment)

urlparse()urlsplit() 基本上是一模一样的,有一个不一样的地方是,urlparse() 里多了一个 “params” 属性,而 urlsplit() 没有这个 params 属性。例如有一个 url 为:“https://www.baidu.com/s;hello?wd=python&username=abc#1”,那么 urlparse() 可以的 “params” 获取到 “hello”,而 urlsplit() 则不可以。

request.Request 类

如果想要伪装爬虫,就要在请求的时候增加一些请求头,那么就必须使用 request.Request 类来实现,比如下面请求拉勾网的这段代码:

from urllib import request, parse

url = ‘https://www.lagou.com/jobs/positionAjax.json?px=default&gx=%E5%85%A8%E8%81%8C&needAddtionalResult=false&isSchoolJob=1‘

// 这里的 User-Agent 和 Referer 参数是我先用 Chrome 访问再用F12检查得到的,下面的 data 也是
headers = {
    ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36‘,
    ‘Referer‘: ‘https://www.lagou.com/jobs/list_Go?px=default&gx=%E5%85%A8%E8%81%8C&gj=&isSchoolJob=1&city=%E5%85%A8%E5%9B%BD‘
}

data = {
    ‘first‘: ‘true‘,
    ‘pn‘: 1,
    ‘kd‘: ‘python‘
}

req = request.Request(url, headers=headers, data=parse.urlencode(data).encode(‘utf-8‘), method=‘POST‘)
resp = request.urlopen(req)
print(resp.read().decode(‘utf-8‘))

ProxyHandler 处理器(代理设置)

许多网站会检测某一时间段某个 IP 的访问次数(通过流量统计,系统日志等),如果访问次数多得不像正常人,它会禁止这个 IP 的访问。所以我们可以设置一些代理服务器,每隔一段时间换一个代理,就算 IP 被禁止,依然可以换个 IP 继续爬取数据。

urllib 中通过 ProxyHandler 来设置使用代理服务器,下面代码说明如何使用自定义 opener 来使用代理:

from urllib import request

# 未使用代理
url = ‘http://httpbin.org/ip‘
resp = request.urlopen(url)
print(resp.read())

# 使用代理
# 1.使用 ProxyHandler,传入代理构建一个handler
handler = request.ProxyHandler({"https": "183.163.40.223:31773"})
# 2.使用上面创建的handler构建一个opener
opener = request.build_opener(handler)
# 3.使用opener发送一个请求
resp = opener.open(url)
print(resp.read())

可以通过 http://httpbin.org/ip 查看自己电脑网络的外网 IP 地址

常用的代理有:

- 西刺免费代理IP:http://www.xicidaili.com/

- 快代理:https://www.kuaidaili.com/

- 代理云:http://www.dailiyun.com/

原文地址:https://www.cnblogs.com/muyisir/p/9339401.html

时间: 2024-10-03 02:12:45

爬虫常用的 urllib 库知识点的相关文章

第三百三十节,web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号

第三百三十节,web爬虫讲解2-urllib库爬虫-实战爬取搜狗微信公众号 封装模块 #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib from urllib import request import json import random import re import urllib.error def hq_html(hq_url): """ hq_html()封装的爬虫函数,自动启用了用户代理和ip

Python3网络爬虫——二、Urllib库的基本使用

一.什么是Urllib Urllib库是Python自带的一个http请求库,包含以下几个模块: urllib.request 请求模块 urllib.error   异常处理模块 urllib.parse   url解析模块 urllib.robotparser  robots.txt解析模块 其中前三个模块比较常用,第四个仅作了解. 二.Urllib方法介绍 将结合Urllib的官方文档进行说明.首先是urllib.request模块: urllib.request.urlopen(url,

Python爬虫入门之Urllib库的高级用法

1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览器,调试浏览器F12,我用的是Chrome,打开网络监听,示意如下,比如知乎,点登录之后,我们会发现登陆之后界面都变化了,出现一个新的界面,实质上这个页面包含了许许多多的内容,这些内容也不是一次性就加载完成的,实质上是执行了好多次请求,一般是首先请求HTML文件,然后加载JS,CSS 等等,经过多次

爬虫基础之urllib库

categories: 爬虫 tags: urlopen urlretrieve urlencode parse_qs urlparse urlsplit urllib库 urllib库是Python中一个最基本的网络请求库.可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据 urlopen函数 在Python3的urllib库中,所有和网络请求相关的方法,都被集到 urllib.request 模块下面了,先来看下urlopen的基本使用 from urllib im

爬虫基础(1):urllib库

urllib库 urllib库是python中的一个基本网络请求库.用于模拟浏览器的行为,向指定服务器发送请求,并接收返回的数据. 在python3中所有的网络请求相关函数都集中在urllib.request模块下面 urlopen函数 向服务器发起请求 urlopen函数的参数 url 目标地址 data 如果有这个参数,将变为post请求 返回值 http.client.HTTPResponse对象,其中含有下面几个方法: read(size) size为空则读取所有 readline()

python爬虫二、Urllib库的基本使用

什么是Urllib Urllib是python内置的HTTP请求库 包括以下模块 urllib.request 请求模块 urllib.error 异常处理模块 urllib.parse url解析模块 urllib.robotparser robots.txt解析模块 urlopen 关于urllib.request.urlopen参数的介绍: urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=No

Python爬虫入门之三urllib库的基本使用

前言 所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地.在Python中有很多库可以用来抓取网页,我们先学习urllib. 注:此博客开发环境为python3 urlopen 我们先来段代码: # urllib_urlopen.py # 导入urllib.request import urllib.request # 向指定的url发送请求,并返回服务器响应的类文件对象 response = urllib.request.urlopen("http://www.bai

爬虫(二):urllib库文件的基础和进阶(python2.7)

1 import urllib2 2 url="https//www.baidu.com"; 3 response=urllib2.urlopen(url); 4 print response.read()5 #************************************同样上面网页的代码可以通过request对象进行访问************ request=urllib2.Request(url) response=urllib2.urlopen(request) p

九 web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号—抓包软件安装Fiddler4讲解

封装模块 #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib from urllib import request import json import random import re import urllib.error def hq_html(hq_url): """ hq_html()封装的爬虫函数,自动启用了用户代理和ip代理 接收一个参数url,要爬取页面的url,返回html源码 "