目录
- 前言:
- 什么是urllib库
- 快速使用urllib爬取网页
- 分析urlopen方法
- 使用HTTPResponse对象1
- 使用HTTPResponse对象2
- 构造Request对象
- 使用urllib实现数据传输
- 发送GET请求
- 需要注意的事项:
![](https://i-blog.csdnimg.cn/blog_migrate/9f41613dbf40a593ff67dbe642126c3c.jpeg)
前言:
在数字时代,互联网已成为我们获取信息、交流思想和购物的主要渠道。每天,全球数以亿计的网页产生和消失,它们中蕴含着无尽的信息和知识。网络爬虫,这个看似神秘的钥匙。网络爬虫,也称为网络蜘蛛或网络机器人,是一种自动化的软件程序,能够按照特定的规则和算法在网络上爬行,收集和抓取数据。通过使用网络爬虫,我们可以深入挖掘网页的内容,理解其结构,甚至预测其未来的变化。在当今的信息时代,互联网已成为我们获取信息的主要来源。而网络爬虫,作为一项强大的技术,可以帮助我们自动地、大规模地抓取网页信息,为我们提供了更加便利的数据收集和分析手段。
什么是urllib库
urllib库是Python内置的HTTP请求库,它 可以看做是处理URL的组件集合。
模块名称 描述 urllib.request 请求模块 urllib.error 异常处理 urllib.parse url解析模块 urllib.robotparser robots.txt解析模块
Requests库是第三方库,它可以通过pip工具进行安装,如此便可以在导入程序后直接使用。requests库安装命令如下:
pip install requests
快速使用urllib爬取网页
import urllib.request
# 调用urllib.request库的urlopen方法,并传入一个url response = urllib.request.urlopen('http://www.baidu.com')
# 使用read方法读取获取到的网页内容
html = response.read().decode('UTF-8')
# 打印网页内容
print(html)
前面在爬取网页时,有一句核心的爬虫代码:
response = urllib.request.urlopen('http://www.baidu.com')
上述代码调用的是urllib. request模块中的urlopen方法,它传入了一个百度首页的URL,使用的协议是HTTP,这是 urlopen方法最简单的用法。
分析urlopen方法
urlopen方法可以接收多个参数,定义格式如下:
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
参数如下:
- url --表示目标资源在网站中的位置。
- data --用来指明向服务器发送请求的额外信息。
- timeout 一 该参数用于设置超时时间,单位是秒。
- context 一 实现SSL加密传输,该参数很少使用。
data参数的使用:
import urllib.request
import urllib.parse
data=bytes(urllib.parse.urlencode({'world':'hello'}).encode('utf-8')
response=urllib.request.urlopen('http://httpbin.org/post',data=data)
print(response.read())
timeout参数的使用:
import urllib.request
import urllib.parse
response=urllib.request.urlopen('http://httpbin.org/get',timeout=1)
print(response.read())
使用HTTPResponse对象1
使用urlopen方法发送HTTP请求后,服务器返回 的响应内容封装在一个HTTPResponse类型的对 象中。实例代码如下:
import urllib.request
response = urllib.request.urlopen('http://www.itcast.cn')
print(type(response))
输出结果为:
使用HTTPResponse对象2
HTTPResponse类属于http.client模块,该 类提供了获取URL、状态码、响应内容等一 系列方法。
- geturl() -- 用于获取响应内容的URL,该方法可以验证发送的HTTP请求是否被重新调配。
- info() -- 返回页面的元信息。 getcode() -- 返回HTTP请求的响应状态码。
import urllib.request
response = urllib.request.urlopen('http://python.org')
#获取响应信息对应的URL
print(response.geturl())
#获取响应码
print(response.getcode())
#获取页面的元信息
print(response.info())
结果如下:
构造Request对象
如果希望对请求执行复杂操作,则需要创建一 个Request对象来作为urlopen方法的参数。
在使用urllib库发送URL的时候,我们推荐大家使用构造Request对象的方式。
在构建请求时,除了必须设置的urI参数外, 还可以加入很多内容,例如下面的参数:
参数如下:
- data -- 默认为空,该参数表示提交表单数据,同时HTTP请求方法将从默认的GET方式改为POST方式。
- headers -- 默认为空,该参数是一个字典类型,包含了需要发送的HTTP报头的键值对。
添加特定Headers—请求伪装
伪装浏览器需要自定义请求报头,也就是在 发送Request请求时,加入特定的Headers。
user_agent = ("User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT6.1; Trident/5.0)"} request = urllib.request.Request(url, headers = user_agent) request.add_header("Connection", "keep-alive")
使用urllib实现数据传输
URL编码转换
当传递的URL中包含中文或者其它特殊字符(如 空格等)时,需要使用urllib.parse库中的 urlencode方法将URL进行编码
它可以将“key:value”这样的键值对转换成“key=value” 这样的字符串。
解码使用的是url.parse库的unquote方法。
发送GET请求
在Requests库中,GET请求通过调用get()函数发送,该函数会根据传入的URL构建一个请求(每个请求都是Request类的对象),将该请求发送给服务器。get()函数的声明如下:
- url:必选参数,表示请求的URL。
- params:可选参数,表示请求的查询字符串。
- headers:可选参数,表示请求的请求头,该参数只支持字典类型的值。
- cookies:可选参数,表示请求的Cookie信息,该参数支持字典或CookieJar类对象。
- verify:可选参数,表示是否启用SSL证书,默认值为True。
- proxies:可选参数,用于设置代理服务器,该参数只支持字典类型的值。
- timeout:可选参数,表示请求网页时设定的超时时长,以秒为单位。
需要注意的事项:
在使用网络爬虫的过程中,我们需要注意一些道德和法律问题。以下是一些需要注意的事项:
- 尊重网站规则:在使用网络爬虫抓取数据时,需要尊重目标网站的robots.txt文件规则,避免对网站造成不必要的负担和影响。
- 遵守法律法规:在使用网络爬虫抓取数据时,需要遵守相关法律法规的规定,不得侵犯他人的合法权益。
- 尊重数据隐私:在使用网络爬虫抓取数据时,需要注意保护用户的隐私和数据安全,不得随意泄露和滥用用户数据。
- 合理使用资源:在使用网络爬虫抓取数据时,需要注意合理使用资源,避免对目标网站造成不必要的负担和影响。
总结:
网络爬虫作为一种强大的技术手段,可以帮助我们更加便利地获取和分析网页数据。在使用网络爬虫的过程中,我们需要遵守相关法律法规和道德规范,尊重他人的权益和隐私,合理使用资源,避免对目标网站造成不必要的负担和影响。同时,我们也需要不断提升自己的技术水平和实践经验,以便更好地应对各种挑战和问题。再者,打代码过程需要保持很大的耐心。