关于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实现读取命令行参数的方法
May 22 Python
Python变量和字符串详解
Apr 29 Python
TensorFlow实现Softmax回归模型
Mar 09 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
Apr 18 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
Nov 01 Python
python绘制简单彩虹图
Nov 19 Python
springboot配置文件抽离 git管理统 配置中心详解
Sep 02 Python
python元组和字典的内建函数实例详解
Oct 22 Python
WxPython实现无边框界面
Nov 18 Python
在notepad++中实现直接运行python代码
Dec 18 Python
python列表返回重复数据的下标
Feb 10 Python
基于Python的图像阈值化分割(迭代法)
Nov 20 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脚本数据库功能详解(上)
2006/10/09 PHP
php生成EXCEL的东东
2006/10/09 PHP
用PHP调用Oracle存储过程的方法
2008/09/12 PHP
PHP 中文处理技巧
2010/04/25 PHP
PHP遍历数组的几种方法
2012/03/22 PHP
ThinkPHP实现一键清除缓存方法
2014/06/26 PHP
PHP实现从远程下载文件的方法
2015/03/12 PHP
关于php unset对json_encode的影响详解
2018/11/14 PHP
jQuery EasyUI API 中文文档 - ValidateBox验证框
2011/10/06 Javascript
js修改地址栏URL参数解决url参数问题
2012/12/15 Javascript
关于JavaScript中string 的replace
2013/04/12 Javascript
Jquery实现视频播放页面的关灯开灯效果
2013/05/27 Javascript
Javascript编程中几种继承方式比较分析
2015/11/28 Javascript
js制作网站首页图片轮播特效代码
2016/08/30 Javascript
学习JavaScript图片预加载模块
2016/11/07 Javascript
JavaScript表单验证完美代码
2017/03/02 Javascript
jquery实现放大镜简洁代码(推荐)
2017/06/08 jQuery
详解 vue better-scroll滚动插件排坑
2018/02/08 Javascript
Vue中的$set的使用实例代码
2018/10/08 Javascript
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
2019/10/23 Javascript
详解js location.href和window.open的几种用法和区别
2019/12/02 Javascript
vue 如何从单页应用改造成多页应用
2020/10/23 Javascript
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
Python将xml和xsl转换为html的方法
2015/03/10 Python
Python多线程扫描端口代码示例
2018/02/09 Python
python实现各种插值法(数值分析)
2019/07/30 Python
django Model层常用验证器及自定义验证器详解
2020/07/15 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
2021/01/07 Python
详解webapp页面滚动卡顿的解决办法
2018/12/26 HTML / CSS
戴森美国官网:Dyson美国
2016/09/11 全球购物
JSF界面控制层技术
2013/06/17 面试题
个人自我鉴定写法
2013/11/30 职场文书
国庆节标语大全
2014/10/08 职场文书
《惊弓之鸟》教学反思
2016/02/20 职场文书
OpenCV3.3+Python3.6实现图片高斯模糊
2021/05/18 Python
通过shell脚本对mysql的增删改查及my.cnf的配置
2021/07/07 MySQL