关于python爬虫应用urllib库作用分析
一、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解码防止有的地方出现乱码
将其打印的内容写到一个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("读取结束")
urllib.parse模块
有时我们爬虫需要模拟浏览器进行用户登录等操作,这个时候我们就需要进行post请求
但是post必须有一个获取请求之后的响应,也就是我们需要有一个服务器。给大家介绍一个免费的服务器网址,就是用来测试用的http://httpbin.org/。主要用来测试http和https的
我们可以尝试执行一下,去获取对应的响应。
可以用Linux命令去发起请求,URL地址为http://httpbin.org/post。得到下方的响应。
我们也可以通过爬虫来实现
# -*- 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解码防止有的地方出现乱码
两个响应结果对比是不是一样几乎
相当于进行了一次模拟的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
- 也可以通过gethead(“xx”) 获取xx对应的值,比如:上图 gethead(content-encoding) 为 gzip
突破反爬
首先打开任何一个网页按F12找到Response Headers,拉到最下面找到 User-Agent。将其复制保存下来,为反爬做准备。
下面我们进行尝试,直接爬取豆瓣,直接来个418,知道你是爬虫,我们来伪装一下
为什么418呢,因为如果是直接进行请求访问的话,发过去的User-Agent 是下面的,直接告诉浏览器我们是爬虫。我们需要伪装
# -*- 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访问的网址一样
浏览器访问结果
爬虫访问结果
# -*- 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库分析的资料请关注猪先飞其它相关文章!
相关文章
- 在本篇内容里小编给大家分享的是关于用C#做网络爬虫的步骤和方法,需要的朋友们可以参考下。...2020-06-25
- 今天带大家来学习selenium库的使用方法及相关知识总结,文中非常详细的介绍了selenium库,对正在学习python的小伙伴很有帮助,需要的朋友可以参考下...2021-05-25
- 这篇文章主要介绍了selenium 反爬虫之跳过淘宝滑块验证功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-08-27
- 这篇文章主要介绍了Nginx中配置过滤爬虫的User-Agent的简单方法,文中罗列了一些常用搜索引擎的爬虫名称以免造成不必要的过滤,需要的朋友可以参考下...2016-01-27
- 这篇文章主要介绍了利用C#实现网络爬虫,完整的介绍了C#实现网络爬虫详细过程,感兴趣的小伙伴们可以参考一下...2020-06-25
- 本文主要讲述了利用Python网络爬虫对指定京东商城中指定商品下的用户评论进行爬取,对数据预处理操作后进行文本情感分析,感兴趣的朋友可以了解下...2021-05-28
- 这篇文章主要介绍了node.js爬虫框架node-crawler的相关资料,帮助大家利用node.js进行爬虫,感兴趣的朋友可以了解下...2020-10-29
python爬虫用request库处理cookie的实例讲解
在本篇内容里小编给大家整理的是一篇关于python爬虫用request库处理cookie的实例讲解内容,有需要的朋友们可以学习参考下。...2021-02-21- 这篇文章主要为大家详细介绍了基于C#实现网页爬虫的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
c# Selenium爬取数据时防止webdriver封爬虫的方法
这篇文章主要介绍了c# Selenium爬取数据时防止webdriver封爬虫的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-15- 本篇文章给大家分享了C#爬虫通过代理刷文章浏览量的详细步骤和方法,有兴趣的朋友可以参考学习下。...2020-06-25
- 这篇文章主要介绍了如何快速一键生成Python爬虫请求头,帮助大家更好的理解和学习使用python爬虫,感兴趣的朋友可以了解下...2021-03-05
- 这篇文章主要介绍了python网络爬虫实现发送短信验证码的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-25
- 这篇文章主要介绍了python爬虫基础之urllib的使用,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下...2020-12-31
- 这篇文章主要介绍了Nodejs爬虫进阶教程之异步并发控制的相关资料,需要的朋友可以参考下...2016-02-18
- 这篇文章主要介绍了Python爬虫urllib和requests的区别详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...2021-09-11
node.js基础模块http、网页分析工具cherrio实现爬虫
这篇文章主要为大家介绍了node.js基础模块http、网页分析工具cherrio实现爬虫的相关资料,需要的朋友可以参考下...2016-03-12- 这篇文章主要介绍了Python爬虫入门教程02之笔趣阁小说爬取,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-01-25
- 这篇文章主要介绍了使用maven实现有关Jsoup简单爬虫的步骤,文中附含详细示例代码,有需要的朋友可以借鉴参考下,希望能够有所帮助...2021-09-16
- 这篇文章主要为大家介绍了Python爬虫进阶中Scrapy框架精细讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步...2021-10-22