关于python爬虫应用urllib库作用分析


Posted in Python onSeptember 04, 2021

一、urllib库是什么?

urllib库用于操作网页 URL,并对网页的内容进行抓取处理

urllib包 包含以下几个模块:

urllib.request - 打开和读取 URL。

urllib.error - 包含 urllib.request 抛出的异常。

urllib.parse - 解析 URL。

urllib.robotparser - 解析 robots.txt 文件

python爬虫主要用到的urllib库中的request和parse模块

二、urllib库的使用

下面我们来详细说明一下这两个常用模块的基本运用

urllib.request模块

urllib.request 定义了一些打开 URL 的函数和类,包含授权验证、重定向、浏览器 cookies等。

语法如下:

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None,

capath=None, cadefault=False, context=None)

 url:url 地址。

data:发送到服务器的其他数据对象,默认为 None。

timeout:设置访问超时时间。

cafile capath:cafile 为 CA 证书, capath 为 CA 证书的路径,使用 HTTPS 需要用到。

cadefault:已经被弃用。

context:ssl.SSLContext类型,用来指定 SSL 设置。

# -*- codeing = utf-8 -*-
# @Author: Y-peak
# @Time : 2021/9/2 19:24
# @FileName : testUrllib.py
# Software : PyCharm
import urllib.request
#get请求
response = urllib.request.urlopen("http://www.baidu.com")  #返回的是存储网页数据的对象
#print(response)  可以尝试打印一下看一下
print(response.read().decode('utf-8')) #通过read将数据读取出来, 使用utf-8解码防止有的地方出现乱码

关于python爬虫应用urllib库作用分析

将其打印的内容写到一个html文件中,打开和百度一毛一样

# -*- codeing = utf-8 -*-
# @Author: Y-peak
# @Time : 2021/9/2 19:24
# @FileName : testUrllib.py
# Software : PyCharm
import urllib.request
response = urllib.request.urlopen("http://www.baidu.com")  #返回的是存储网页数据的对象
data = response.read().decode('utf-8')  #通过read将数据读取出来, 使用utf-8解码防止有的地方出现乱码
#print(data)
with open("index.html",'w',encoding='utf-8') as wfile: #或者你们也可以常规打开,不过需要最后关闭记得close()
    wfile.write(data)
    print("读取结束")

关于python爬虫应用urllib库作用分析

urllib.parse模块

有时我们爬虫需要模拟浏览器进行用户登录等操作,这个时候我们就需要进行post请求

但是post必须有一个获取请求之后的响应,也就是我们需要有一个服务器。给大家介绍一个免费的服务器网址,就是用来测试用的http://httpbin.org/。主要用来测试http和https的

关于python爬虫应用urllib库作用分析

关于python爬虫应用urllib库作用分析

我们可以尝试执行一下,去获取对应的响应。

关于python爬虫应用urllib库作用分析

关于python爬虫应用urllib库作用分析

可以用Linux命令去发起请求,URL地址为http://httpbin.org/post。得到下方的响应。

关于python爬虫应用urllib库作用分析

我们也可以通过爬虫来实现

# -*- codeing = utf-8 -*-
# @Author: Y-peak
# @Time : 2021/9/2 19:24
# @FileName : testUrllib.py
# Software : PyCharm
import urllib.request
import urllib.parse #解析器
data = bytes(urllib.parse.urlencode({"hello":"world"}),encoding='utf-8')  #转换为二进制数据包,里面是键值对(有时输入的用户名:密码就是这样的),还有一些编码解码的数值等.这里就是按照utf-8的格式进行解析封装生成二进制数据包
response = urllib.request.urlopen("http://httpbin.org/post",data=data)  #返回的请求
print(response.read().decode('utf-8'))      #通过read将数据读取出来, 使用utf-8解码防止有的地方出现乱码

两个响应结果对比是不是一样几乎

关于python爬虫应用urllib库作用分析

关于python爬虫应用urllib库作用分析

相当于进行了一次模拟的post请求。这样有些需要登录的网站也是可以爬取的。

利用try-except,进行超时处理

一般进行爬虫时,不可能一直等待响应。有时网络不好或者网页有反爬或者一些其他东西时。无法快速爬出。我们就可以进入下一个网页继续去爬。利用timeout属性就好

# -*- codeing = utf-8 -*-
# @Author: Y-peak
# @Time : 2021/9/2 19:24
# @FileName : testUrllib.py
# Software : PyCharm
import urllib.request
try:
    response = urllib.request.urlopen("http://httpbin.org/get",timeout=0.01)  #返回的是存储网页数据的对象, 直接用这个网址的get请求了.timeout表示超时,超过0.01秒不响应就报错,避免持续等待
    print(response.read().decode('utf-8'))      #通过read将数据读取出来, 使用utf-8解码防止有的地方出现乱码
except urllib.error.URLError as e:
    print("超时了\t\t错误为:",e)

status状态码 && getheaders()

status:

  • 返回200,正确响应可以爬取
  • 报错404,没有找到网页
  • 报错418,老子知道你就是爬虫
  • getheaders():获取Response Headers

关于python爬虫应用urllib库作用分析 

  • 也可以通过gethead(“xx”) 获取xx对应的值,比如:上图 gethead(content-encoding) 为 gzip

突破反爬

首先打开任何一个网页按F12找到Response Headers,拉到最下面找到 User-Agent。将其复制保存下来,为反爬做准备。

关于python爬虫应用urllib库作用分析

关于python爬虫应用urllib库作用分析

下面我们进行尝试,直接爬取豆瓣,直接来个418,知道你是爬虫,我们来伪装一下

关于python爬虫应用urllib库作用分析

为什么418呢,因为如果是直接进行请求访问的话,发过去的User-Agent 是下面的,直接告诉浏览器我们是爬虫。我们需要伪装

关于python爬虫应用urllib库作用分析

 

# -*- codeing = utf-8 -*-
# @Author: Y-peak
# @Time : 2021/9/2 19:24
# @FileName : testUrllib.py
# Software : PyCharm
import urllib.request
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
}
request = urllib.request.Request("http://douban.com", headers=headers) #返回的是请求,将我们伪装成浏览器发送的请求
response = urllib.request.urlopen(request)  #返回的是存储网页数据的对象
data = response.read().decode('utf-8')     #通过read将数据读取出来, 使用utf-8解码防止有的地方出现乱码
with open("index.html",'w',encoding='utf-8') as wfile: #或者你们也可以常规打开,不过需要最后关闭记得close()
    wfile.write(data)

当然反爬不可能如此简单,上面将讲的那个 post请求,也是十分常见的突破反爬的方式,不行就将整个Response Headers全部模仿。下面还有个例子作为参考。和上面的post访问的网址一样

浏览器访问结果

关于python爬虫应用urllib库作用分析

爬虫访问结果

# -*- codeing = utf-8 -*-
# @Author: Y-peak
# @Time : 2021/9/3 0:47
# @FileName : testUrllib.py
# Software : PyCharm

import urllib.request
import urllib.parse
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
}
url = "http://httpbin.org/post"
data = (bytes)(urllib.parse.urlencode({"账户":"密码"}),encoding = 'utf-8')
request = urllib.request.Request(url, data = data,headers=headers, method='POST') #返回的是请求
response = urllib.request.urlopen(request)  #返回的是存储网页数据的对象
data = response.read().decode('utf-8')     #通过read将数据读取出来, 使用utf-8解码防止有的地方出现乱码
print(data)

关于python爬虫应用urllib库作用分析

 

以上就是关于python爬虫应用urllib库作用分析的详细内容,更多关于python爬虫urllib库分析的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python import自定义模块方法
Feb 12 Python
python清除字符串里非数字字符的方法
Jul 02 Python
Python利用Django如何写restful api接口详解
Jun 08 Python
python并发编程多进程 模拟抢票实现过程
Aug 20 Python
Django实现从数据库中获取到的数据转换为dict
Mar 27 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
Jun 03 Python
什么是python的自省
Jun 21 Python
python中查看.db文件中表格的名字及表格中的字段操作
Jul 07 Python
python实现图片批量压缩
Apr 24 Python
Python中使用subprocess库创建附加进程
May 11 Python
解析目标检测之IoU
Jun 26 Python
pycharm安装深度学习pytorch的d2l包失败问题解决
Mar 25 Python
解决pycharm下载库时出现Failed to install package的问题
关于python类SortedList详解
Sep 04 #Python
Python3.8官网文档之类的基础语法阅读
Sep 04 #Python
python实现Nao机器人的单目测距
Sep 04 #Python
python读取mnist数据集方法案例详解
Sep 04 #Python
Pyqt5将多个类组合在一个界面显示的完整示例
Sep 04 #Python
一小时学会TensorFlow2之基本操作2实例代码
You might like
使用淘宝IP库获取用户ip地理位置
2013/10/27 PHP
php操作MongoDB类实例
2015/06/17 PHP
Laravel5中防止XSS跨站攻击的方法
2016/10/10 PHP
PHP/HTML混写的四种方式总结
2017/02/27 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
2020/05/02 PHP
PHP dirname简单使用代码实例
2020/11/13 PHP
IE8 中使用加速器(Activities)
2010/05/14 Javascript
Jquery+WebService 校验账号是否已被注册的代码
2010/07/12 Javascript
JavaScript内核之基本概念
2011/10/21 Javascript
jQuery事件 delegate()使用方法介绍
2012/10/30 Javascript
JavaScript实现向右伸出的多级网页菜单效果
2015/08/25 Javascript
JavaScript中boolean类型之三种情景实例代码
2016/11/21 Javascript
Bootstrap选项卡学习笔记分享
2017/02/13 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
2017/06/01 Javascript
react-navigation 如何判断用户是否登录跳转到登录页的方法
2017/12/01 Javascript
Angular使用Restful的增删改
2018/12/28 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
2019/05/22 Javascript
uniapp实现横向滚动选择日期
2020/10/21 Javascript
如何利用nodejs实现命令行游戏
2020/11/24 NodeJs
python自动翻译实现方法
2016/05/28 Python
Python安装第三方库及常见问题处理方法汇总
2016/09/13 Python
python+django快速实现文件上传
2016/10/24 Python
Python实现感知机(PLA)算法
2017/12/20 Python
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
2018/04/05 Python
如何在Python中实现goto语句的方法
2019/05/18 Python
Python列表(list)所有元素的同一操作解析
2019/08/01 Python
python 字符串常用函数详解
2019/09/11 Python
Python接口测试数据库封装实现原理
2020/05/09 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
英国手工布艺沙发在线购买:Sofas & Stuff
2018/03/02 全球购物
澳大利亚当地社区首选的光学商店:1001 Optical
2019/08/24 全球购物
美国手机支架公司:PopSockets
2019/11/27 全球购物
广告学专业应届生求职信
2013/10/01 职场文书
酒店办公室文员岗位职责
2013/12/18 职场文书
学习标兵获奖感言
2014/02/20 职场文书
超越Nginx的Web服务器caddy优雅用法
2022/06/21 Servers