python3使用requests模块爬取页面内容的实战演练


Posted in Python onSeptember 25, 2017

1.安装pip

我的个人桌面系统用的linuxmint,系统默认没有安装pip,考虑到后面安装requests模块使用pip,所以我这里第一步先安装pip。

$ sudo apt install python-pip

安装成功,查看PIP版本:

$ pip -V

2.安装requests模块

这里我是通过pip方式进行安装:

$ pip install requests

python3使用requests模块爬取页面内容的实战演练

运行import requests,如果没提示错误,那说明已经安装成功了!

python3使用requests模块爬取页面内容的实战演练

检验是否安装成功

3.安装beautifulsoup4

Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航,查找、修改文档的方式。Beautiful Soup会帮你节省数小时甚至数天的工作时间。

$ sudo apt-get install python3-bs4

注:这里我使用的是python3的安装方式,如果你用的是python2,可以使用下面命令安装。

$ sudo pip install beautifulsoup4

4.requests模块浅析

1)发送请求

首先当然是要导入 Requests 模块:

>>> import requests

然后,获取目标抓取网页。这里我以下为例:

>>> r = requests.get('https://3water.com/article/124421.htm')

这里返回一个名为 r 的响应对象。我们可以从这个对象中获取所有我们想要的信息。这里的get是http的响应方法,所以举一反三你也可以将其替换为put、delete、post、head。

2)传递URL参数

有时我们想为 URL 的查询字符串传递某种数据。如果你是手工构建 URL,那么数据会以键/值对的形式置于 URL 中,跟在一个问号的后面。例如, cnblogs.com/get?key=val。 Requests 允许你使用 params 关键字参数,以一个字符串字典来提供这些参数。

举例来说,当我们google搜索“python爬虫”关键词时,newwindow(新窗口打开)、q及oq(搜索关键词)等参数可以手工组成URL ,那么你可以使用如下代码:

>>> payload = {'newwindow': '1', 'q': 'python爬虫', 'oq': 'python爬虫'}

>>> r = requests.get("https://www.google.com/search", params=payload)

3)响应内容

通过r.text或r.content来获取页面响应内容。

>>> import requests

>>> r = requests.get('https://github.com/timeline.json')

>>> r.text

Requests 会自动解码来自服务器的内容。大多数 unicode 字符集都能被无缝地解码。这里补充一点r.text和r.content二者的区别,简单说:

resp.text返回的是Unicode型的数据;

resp.content返回的是bytes型也就是二进制的数据;

所以如果你想取文本,可以通过r.text,如果想取图片,文件,则可以通过r.content。

4)获取网页编码

>>> r = requests.get('http://www.cnblogs.com/')

>>> r.encoding

'utf-8'

5)获取响应状态码

我们可以检测响应状态码:

>>> r = requests.get('http://www.cnblogs.com/')

>>> r.status_code

200

5.案例演示

最近公司刚引入了一款OA系统,这里我以其官方说明文档页面为例,并且只抓取页面中文章标题和内容等有用信息。

演示环境

操作系统:linuxmint

python版本:python 3.5.2

使用模块:requests、beautifulsoup4

代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
_author_ = 'GavinHsueh'

import requests
import bs4

#要抓取的目标页码地址
url = 'http://www.ranzhi.org/book/ranzhi/about-ranzhi-4.html'

#抓取页码内容,返回响应对象
response = requests.get(url)

#查看响应状态码
status_code = response.status_code

#使用BeautifulSoup解析代码,并锁定页码指定标签内容
content = bs4.BeautifulSoup(response.content.decode("utf-8"), "lxml")
element = content.find_all(id='book')

print(status_code)
print(element)

程序运行返回爬去结果:

python3使用requests模块爬取页面内容的实战演练

抓取成功

关于爬去结果乱码问题

其实起初我是直接用的系统默认自带的python2操作的,但在抓取返回内容的编码乱码问题上折腾了老半天,google了多种解决方案都无效。在被python2“整疯“之后,只好老老实实用python3了。对于python2的爬取页面内容乱码问题,欢迎各位前辈们分享经验,以帮助我等后生少走弯路。

后记

python的爬虫相关模块有很多,除了requests模块,再如urllib和pycurl以及tornado等。相比而言,我个人觉得requests模块是相对简单易上手的了。通过文本,大家可以迅速学会使用python的requests模块爬取页码内容。本人能力有限,如果文章有任何错误欢迎不吝赐教,其次如果大家有任何关于python爬去页面内容的疑难杂问,也欢迎和大家一起交流讨论。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用python3.5仿微软记事本notepad
Jun 15 Python
Python科学画图代码分享
Nov 29 Python
使用CodeMirror实现Python3在线编辑器的示例代码
Jan 14 Python
python画双y轴图像的示例代码
Jul 07 Python
python psutil模块使用方法解析
Aug 01 Python
pandas DataFrame行或列的删除方法的实现示例
Aug 02 Python
python绘制随机网络图形示例
Nov 21 Python
python3 常见解密加密算法实例分析【base64、MD5等】
Dec 19 Python
TensorFlow tf.nn.conv2d实现卷积的方式
Jan 03 Python
python中文分词库jieba使用方法详解
Feb 11 Python
Python LMDB库的使用示例
Feb 14 Python
Python中npy和mat文件的保存与读取
Apr 24 Python
python中通过预先编译正则表达式提高效率
Sep 25 #Python
python之Character string(实例讲解)
Sep 25 #Python
python利用正则表达式搜索单词示例代码
Sep 24 #Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
Sep 24 #Python
Django如何实现内容缓存示例详解
Sep 24 #Python
Django查询数据库的性能优化示例代码
Sep 24 #Python
python学习教程之使用py2exe打包
Sep 24 #Python
You might like
php取整函数ceil,floo,round的用法及介绍
2013/08/31 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
PHP实现字符串大小写转函数的功能实例
2019/02/06 PHP
firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码
2007/04/12 Javascript
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
2011/07/31 Javascript
HTML页面弹出居中可拖拽的自定义窗口层
2014/05/07 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
JS实现获取键盘按下的按键并显示在页面上的方法
2015/11/04 Javascript
js原型链与继承解析(初体验)
2016/05/09 Javascript
最简单的tab切换实例代码
2016/05/13 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
2016/05/16 Javascript
BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法
2016/06/07 Javascript
基于jQuery ligerUI实现分页样式
2016/09/18 Javascript
最常见的左侧分类菜单栏jQuery实现代码
2016/11/28 Javascript
JS插件plupload.js实现多图上传并显示进度条
2016/11/29 Javascript
js实现数字递增特效【仿支付宝我的财富】
2017/05/05 Javascript
JS原型继承四步曲及原型继承图一览
2017/11/28 Javascript
将Sublime Text 3 添加到右键中的简单方法
2017/12/12 Javascript
Vue 实现展开折叠效果的示例代码
2018/08/27 Javascript
React注册倒计时功能的实现
2018/09/06 Javascript
bootstrap实现嵌套模态框的实例代码
2020/01/10 Javascript
vue+koa2搭建mock数据环境的详细教程
2020/05/18 Javascript
安装Python的教程-Windows
2017/07/22 Python
python对列进行平移变换的方法(shift)
2019/01/10 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
python3发送request请求及查看返回结果实例
2020/04/30 Python
ShellScript面试题一则-ShellScript编程
2014/03/05 面试题
招商经理岗位职责
2013/11/16 职场文书
商务英语专业求职信范文
2014/01/28 职场文书
大学生求职信
2014/06/17 职场文书
我是特种兵观后感
2015/06/11 职场文书
开学典礼校长致辞
2015/07/29 职场文书
生活小常识广播稿
2015/08/19 职场文书
Redis源码阅读:Redis字符串SDS详解
2021/07/15 Redis
python自动化测试通过日志3分钟定位bug
2021/11/20 Python