Dotcpp  >  编程教程  >  Python爬虫  >  Python爬虫技术基础(1)-网络请求

Python爬虫技术基础(1)-网络请求

点击打开在线编译器,边学边练

        我们在使用爬虫的时候离不开URL地址和下载页面,首先我们就来了解一下URL。它的语法格式一般为:

protocol :// hostname[:port] / path / [;parameters][?query]#fragment

        URL由三部分组成,第一部分是协议,有http、https、ftp等,第二部分存放资源的服务器的域名或IP地址,第三部分为资源的具体地址

        我们在进行网络请求的时候通常采用三种方式:urllib、urllib3和requests,下面我们就来介绍一下urllib和requests。

1. urllib模块

        urllib是Python系统库中存在的一个模块,它提供了多个子模块:

        1) urllib.request

        提供打开和阅读URL的方法和类。

        2) urllib.error

        包含异常类。

        3) urllib.parse

        解析和引用URL。

        4) urllib.robotparser

        解析robots.txt文件。

        我们使用最多的是第一个子模块中的方法,其中包含了对服务器请求的发出、跳转、代理等。

        当我们向网页发送请求的时候,采用urllib.request.urlopen()方法。

        例如:

import urllib.request#引入模块
response = urllib.request.urlopen('http://www.baidu.com/')
html = response.read().decode('utf-8')#以utf-8格式读取网页的内容
print(html)#输出内容

        输出结果为网页中的内容(html格式):

 python爬虫7

        它还包含data参数,data参数主要是字节流编码格式的内容,即bytes类型,通过bytes()方法来进行转换。

import urllib.parse
import urllib.request
data = bytes(urllib.parse.urlencode({'word': 'hello'}), encoding='utf8')
response = urllib.request.urlopen('http://httpbin.org/post', data=data)
print(response.read())

        这个例子传递了一个参数word,它的值为hello,它会被转换为bytes类型,第二个参数为编码格式,我们常选择utf8。data参数有很多功能,这一点在后续会慢慢了解到。

        还可以通过timeout参数来设置超时时间,它是直接加在urlopen括号中其余不常用参数就不作过多介绍,有兴趣的可以在Python官方文档中进行查阅。https://docs.python.org/3/library/urllib.request.html。

2. requests模块

        requests是一种第三方模块,主要用于发送请求,它在使用的时候比urllib模块要简洁方便很多,我们可以在命令操作符里通过pip install requests来安装,也可以在Pycharm中直接进行安装。

 python爬虫8

        我们可以通过requests模块的get方法打印多种请求信息,代码如下:

import requests
r = requests.get('https://www.douban.com/')
print(r.status_code)#输出状态码
print(r.encoding)#输出编码格式
print(r.headers)#输出头部文件
print(r.cookies)#输出cookie信息
print(r.content)#输出字节流形式网页源码

        输出结果如下:

418None{'Date': 'Wed, 19 Feb 2020 10:10:22 GMT', 'Content-Length': '0', 'Connection': 'keep-alive',
 'Keep-Alive': 'timeout=30', 'Server': 'dae'}<RequestsCookieJar[]>b''

        requests模块也可以使用post、put、delete、hand等来发送请求,详情可以参考:

        http://2.python-requests.org/zh_CN/latest/user/quickstart.html

3. 总结

        本节我们主要介绍了Python发送网络请求的方式,在第一节介绍爬虫流程的时候提到过,发送请求是爬虫操作的关键步骤,但是我们在使用的时候会发现,无论是如何发送请求都会被服务器拒绝,因此我们需要请求headers处理,下一节我们来学习请求headers处理。



本文固定URL:https://www.dotcpp.com/course/318

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Python教程
第一章 Python入门
第二章 Python基础语法
第三章 Python入门语法
第四章 Python核心语法
第五章 Python函数
第六章 Python面向对象编程
第七章 Python模块
第八章 Python异常处理和程序调试
第九章 Python文件及目录操作
第十章 PythonGUI编程
第十一章 Python进程和线程
第十二章 Python数据库管理
第十三章 Python算法
第十四章 Python爬虫
第十五章 Python实战项目
第十六章 后记
Dotcpp在线编译      (登录可减少运行等待时间)