关于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 域名分析工具实现代码
Jul 15 Python
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
Jul 14 Python
Python通过90行代码搭建一个音乐搜索工具
Jul 29 Python
Python中MySQL数据迁移到MongoDB脚本的方法
Apr 28 Python
12步入门Python中的decorator装饰器使用方法
Jun 20 Python
深度定制Python的Flask框架开发环境的一些技巧总结
Jul 12 Python
Python字符串处理实现单词反转
Jun 14 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
Nov 16 Python
python字符串,元组,列表,字典互转代码实例详解
Feb 14 Python
Python3如何在Windows和Linux上打包
Feb 25 Python
Python Selenium XPath根据文本内容查找元素的方法
Dec 07 Python
python中subplot大小的设置步骤
Jun 28 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
php strstr查找字符串中是否包含某些字符的查找函数
2010/06/03 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
2014/06/19 PHP
PHP生成二维码与识别二维码的方法详解【附源码下载】
2019/03/07 PHP
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
JQuery记住用户名和密码的具体实现
2014/04/04 Javascript
JS获取单击按钮单元格所在行的信息
2014/06/17 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
2014/09/01 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
使用canvas实现仿新浪微博头像截取上传功能
2015/09/02 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
JavaScript实现QQ列表展开收缩扩展功能
2017/10/30 Javascript
webpack打包react项目的实现方法
2018/06/21 Javascript
简述JS浏览器的三种弹窗
2018/07/15 Javascript
JS实现图片上传多次上传同一张不生效的处理方法
2018/08/06 Javascript
微信小程序公用参数与公用方法用法示例
2019/01/09 Javascript
vue-form表单验证是否为空值的实例详解
2019/10/29 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
2020/03/03 Javascript
Python中logging模块的用法实例
2014/09/29 Python
python学生信息管理系统(初级版)
2018/10/17 Python
Django model反向关联名称的方法
2018/12/15 Python
python pandas生成时间列表
2019/06/29 Python
施华洛世奇天猫官方旗舰店:SWAROVSKI
2017/04/17 全球购物
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
弘扬民族精神演讲稿
2014/05/07 职场文书
文秘自荐信
2014/06/28 职场文书
2014年九一八事变演讲稿
2014/09/14 职场文书
处级领导干部四风问题自我剖析材料
2014/09/29 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书
机关干部作风整顿心得体会
2016/01/22 职场文书
写自招自荐信的绝招!
2019/04/19 职场文书
诚信高考倡议书
2019/06/24 职场文书
MySQL 那些常见的错误设计规范,你都知道吗
2021/07/16 MySQL
SQL Server数据库查询出现阻塞之性能调优
2022/04/10 SQL Server
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技