“使用Requests爬取豆瓣短评”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
(创建空白页面)
 
 
第1行: 第1行:
 +
本节课程的内容是介绍什么是Requests库、如何安装Requests库以及如何使用Requests库进行实际运用。
  
 +
==Requests库介绍==
 +
 +
Requests库官方的介绍有这么一句话:Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。
 +
 +
这句话直接并霸气地宣示了Requests库是python最好的一个HTTP库。
 +
 +
为什么它有这样的底气?请阅读[http://cn.python-requests.org/zh_CN/latest/ Requests官方文档]。
 +
 +
==如何安装Requests==
 +
 +
这里介绍两种常用的python安装第三方库的方法,建议大家首先使用第一种方法,如果使用第一种方法安装库的时候出现错误,或者使用第一种方法下载速度过慢,再使用第二种方法。
 +
 +
===第一种方法:pip安装===
 +
 +
打开cmd命令行,输入pip install requests
 +
 +
    <nowiki>C:\Users\thinkpad>pip install requests
 +
Collecting pygame
 +
  Downloading pygame-1.9.3-cp36-cp36m-win32.whl (4.0MB)
 +
    5% |█▊                              | 215kB 28kB/s eta 0:02:11
 +
</nowiki>
 +
 +
出现Successfully installed,即表示成功安装。
 +
 +
然后进入python,输入:
 +
 +
import requests
 +
 +
没有报错的话即表示可以使用requests库了。
 +
 +
阅读[http://blog.csdn.net/ouyanggengcheng/article/details/72821092 pyhton之pip常用命令],了解如何使用python安装三方库之利器 —– pip 的使用方法。
 +
 +
===第二种方法:下载包再安装===
 +
 +
前往http://www.lfd.uci.edu/~gohlke/pythonlibs/,手动下载需要安装的第三方包(注意对应你的python版本是32位还是64位)。
 +
 +
然后在下载下来的文件所在目录按住shift并点击鼠标右键,选择在此处打开Powershell窗口,在此命令行中使用“pip install + 下载下来文件全名”,即可完成安装。
 +
 +
[[文件:bd3-2.png]]
 +
 +
[[文件:bd3-3.png]]
 +
 +
安装完成后同样需要进入python并import一下,确定可以正常使用。
 +
 +
==Requests的简单用法==
 +
 +
Requests库的七个主要方法
 +
 +
<nowiki>方法 说明
 +
requests.request() 构造一个请求,支撑以下各方法的基础方法
 +
requests.get() 获取HTML网页的主要方法,对应于HTTP的GET
 +
requests.head() 获取HTML网页头信息的方法,对应于HTTP的HEAD
 +
requests.post() 向HTML网页提交POST请求的方法,对应于HTTP的POST
 +
requests.put() 向HTML网页提交PUT请求的方法,对应于HTTP的PUT
 +
requests.patch() 向HTML网页提交局部修改请求,对应于HTTP的PATCH
 +
requests.delete() 向HTML网页提交删除请求,对应于HTTP的DELETE</nowiki>
 +
 +
这里我们只需要掌握最常用的requests.get()方法即可。
 +
 +
Requests.get的用法:
 +
 +
import requests  #导入Requests库
 +
r = requests.get(url) #使用get方法发送请求,返回包含网页数据的Response并存储到Response对象r中
 +
 +
Response对象的属性:
 +
 +
    r.status_code:http请求的返回状态,200表示连接成功(阅读HTTP状态码,了解各状态码含义)
 +
 +
    r.text:返回对象的文本内容
 +
    r.content:猜测返回对象的二进制形式
 +
    r.encoding:分析返回对象的编码方式
 +
    r.apparent_encoding:响应内容编码方式(备选编码方式)
 +
 +
以知乎为例,展示上述代码的使用:
 +
 +
<nowiki>>>> import requests
 +
>>> r = requests.get('https://www.zhihu.com/')
 +
>>> r.status_code
 +
500
 +
>>> r.text  #省略
 +
>>> r.content  #省略
 +
>>> r.encoding
 +
'ISO-8859-1'
 +
>>> r.apparent_encoding
 +
'ascii'</nowiki>
 +
 +
==实战环节==
 +
 +
===分析豆瓣短评网页===
 +
首先通过浏览器工具来分析网页的加载方式,回忆一下上节课提到的同步加载和异步加载的区别。只有同步加载的数据才能直接在网页源代码中直接查看到,异步加载的数据直接查看网页源代码是看不到的。
 +
 +
[[文件:bd3-4.png]]
 +
 +
把JavaScript由“允许”改为“阻止”,重新刷新页面,若网页正常加载,说明该网页的加载方式是同步加载,若网页没有正常加载,说明该网页的加载方式是异步加载。
 +
 +
===使用Requests下载数据的步骤===
 +
 +
*导入Requests库
 +
*输入url
 +
*使用get方法
 +
*打印返回文本
 +
*抛出异常
 +
 +
<nowiki>import requests #导入Requests库
 +
 +
url = ' ' #输入url
 +
r = requests.get(url,timeout=20) #使用get方法
 +
print(r.text) #打印返回文本
 +
print(r.raise_for_status()) #抛出异常</nowiki>
 +
 +
===爬取网页通用框架===
 +
 +
*定义函数
 +
*设置超时
 +
*异常处理
 +
*调用函数
 +
 +
<nowiki>#定义函数
 +
def getHTMLText(url):
 +
    try:
 +
        r = requests.get(url,timeout=20) #设置超时
 +
        r.raise_for_status()
 +
        r.encoding = r.apparent_encoding
 +
        return r.text
 +
    except: #异常处理
 +
        return "产生异常"
 +
 +
if __name__ == '__main__':
 +
    url = " "
 +
    print(getHTMLText(url)) #调用函数</nowiki>
 +
 +
==爬虫协议==
 +
 +
'''什么是爬虫协议''':爬虫协议,也被叫做robots协议,是为了告诉网络蜘蛛哪些页面可以抓取,哪些页面不能抓取
 +
 +
'''如何查看爬虫协议''':在访问网站域名后加上robots.txt即可,例如查看百度网站的爬虫协议:https://www.baidu.com/robots.txt
 +
 +
===爬虫协议属性===
 +
 +
<nowiki>拦截所有的机器人:
 +
User-agent: *
 +
Disallow: /
 +
 +
允许所有的机器人:
 +
User-agent: *
 +
Disallow:</nowiki>
 +
 +
阅读[https://baike.baidu.com/item/robots%E5%8D%8F%E8%AE%AE/2483797?fr=aladdin&fromid=15275977&fromtitle=%E7%88%AC%E8%99%AB%E5%8D%8F%E8%AE%AE robots协议],了解更多爬虫协议属性。
 +
 +
===爬虫建议===
 +
 +
*爬取互联网公开数据
 +
*尽量放慢你的速度
 +
*尽量遵循robots协议
 +
*不要用于商业用途
 +
*不要公布爬虫程序与数据
 +
 +
===扩展阅读:为何要遵循爬虫协议?===
 +
 +
即使不是爬虫工程师,关注互联网的人也很少不知道Robots协议的。百度和360从2012年起展开的一场屏蔽与反屏蔽战把原本程序员才知道的Robots协议变成媒体热词。北京一中院8月7日对3B搜索不正当竞争纠纷案(3B案)作出的一审判决让Robots协议在新闻里又火了一把。Robots协议的法律地位或法律效力问题是3B案一系列法律问题中最大的争点。作为一个爬虫学习者必须从中吸取教训,不要让自己的爬虫违反了法律。
 +
 +
阅读[https://www.huxiu.com/article/39796/1.html 为什么必须保护Robots协议?],坚守爬虫的法律底线。

2019年5月19日 (日) 01:11的最新版本

本节课程的内容是介绍什么是Requests库、如何安装Requests库以及如何使用Requests库进行实际运用。

Requests库介绍

Requests库官方的介绍有这么一句话:Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。

这句话直接并霸气地宣示了Requests库是python最好的一个HTTP库。

为什么它有这样的底气?请阅读Requests官方文档

如何安装Requests

这里介绍两种常用的python安装第三方库的方法,建议大家首先使用第一种方法,如果使用第一种方法安装库的时候出现错误,或者使用第一种方法下载速度过慢,再使用第二种方法。

第一种方法:pip安装

打开cmd命令行,输入pip install requests

   C:\Users\thinkpad>pip install requests
Collecting pygame
  Downloading pygame-1.9.3-cp36-cp36m-win32.whl (4.0MB)
    5% |█▊                              | 215kB 28kB/s eta 0:02:11

出现Successfully installed,即表示成功安装。

然后进入python,输入:

import requests

没有报错的话即表示可以使用requests库了。

阅读pyhton之pip常用命令,了解如何使用python安装三方库之利器 —– pip 的使用方法。

第二种方法:下载包再安装

前往http://www.lfd.uci.edu/~gohlke/pythonlibs/,手动下载需要安装的第三方包(注意对应你的python版本是32位还是64位)。

然后在下载下来的文件所在目录按住shift并点击鼠标右键,选择在此处打开Powershell窗口,在此命令行中使用“pip install + 下载下来文件全名”,即可完成安装。

Bd3-2.png

Bd3-3.png

安装完成后同样需要进入python并import一下,确定可以正常使用。

Requests的简单用法

Requests库的七个主要方法

方法 	说明
requests.request() 	构造一个请求,支撑以下各方法的基础方法
requests.get() 	获取HTML网页的主要方法,对应于HTTP的GET
requests.head() 	获取HTML网页头信息的方法,对应于HTTP的HEAD
requests.post() 	向HTML网页提交POST请求的方法,对应于HTTP的POST
requests.put() 	向HTML网页提交PUT请求的方法,对应于HTTP的PUT
requests.patch() 	向HTML网页提交局部修改请求,对应于HTTP的PATCH
requests.delete() 	向HTML网页提交删除请求,对应于HTTP的DELETE

这里我们只需要掌握最常用的requests.get()方法即可。

Requests.get的用法:

import requests  #导入Requests库
r = requests.get(url) #使用get方法发送请求,返回包含网页数据的Response并存储到Response对象r中

Response对象的属性:

   r.status_code:http请求的返回状态,200表示连接成功(阅读HTTP状态码,了解各状态码含义)
   r.text:返回对象的文本内容
   r.content:猜测返回对象的二进制形式
   r.encoding:分析返回对象的编码方式
   r.apparent_encoding:响应内容编码方式(备选编码方式)

以知乎为例,展示上述代码的使用:

>>> import requests
>>> r = requests.get('https://www.zhihu.com/')
>>> r.status_code
500
>>> r.text   #省略
>>> r.content   #省略
>>> r.encoding
'ISO-8859-1'
>>> r.apparent_encoding
'ascii'

实战环节

分析豆瓣短评网页

首先通过浏览器工具来分析网页的加载方式,回忆一下上节课提到的同步加载和异步加载的区别。只有同步加载的数据才能直接在网页源代码中直接查看到,异步加载的数据直接查看网页源代码是看不到的。

Bd3-4.png

把JavaScript由“允许”改为“阻止”,重新刷新页面,若网页正常加载,说明该网页的加载方式是同步加载,若网页没有正常加载,说明该网页的加载方式是异步加载。

使用Requests下载数据的步骤

  • 导入Requests库
  • 输入url
  • 使用get方法
  • 打印返回文本
  • 抛出异常
import requests #导入Requests库

url = ' ' #输入url
r = requests.get(url,timeout=20) #使用get方法
print(r.text) #打印返回文本
print(r.raise_for_status()) #抛出异常

爬取网页通用框架

  • 定义函数
  • 设置超时
  • 异常处理
  • 调用函数
#定义函数
def getHTMLText(url):
    try:
        r = requests.get(url,timeout=20) #设置超时
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except: #异常处理
        return "产生异常"

if __name__ == '__main__':
    url = " "
    print(getHTMLText(url)) #调用函数

爬虫协议

什么是爬虫协议:爬虫协议,也被叫做robots协议,是为了告诉网络蜘蛛哪些页面可以抓取,哪些页面不能抓取

如何查看爬虫协议:在访问网站域名后加上robots.txt即可,例如查看百度网站的爬虫协议:https://www.baidu.com/robots.txt

爬虫协议属性

拦截所有的机器人:
User-agent: *
Disallow: /

允许所有的机器人:
User-agent: *
Disallow:

阅读robots协议,了解更多爬虫协议属性。

爬虫建议

  • 爬取互联网公开数据
  • 尽量放慢你的速度
  • 尽量遵循robots协议
  • 不要用于商业用途
  • 不要公布爬虫程序与数据

扩展阅读:为何要遵循爬虫协议?

即使不是爬虫工程师,关注互联网的人也很少不知道Robots协议的。百度和360从2012年起展开的一场屏蔽与反屏蔽战把原本程序员才知道的Robots协议变成媒体热词。北京一中院8月7日对3B搜索不正当竞争纠纷案(3B案)作出的一审判决让Robots协议在新闻里又火了一把。Robots协议的法律地位或法律效力问题是3B案一系列法律问题中最大的争点。作为一个爬虫学习者必须从中吸取教训,不要让自己的爬虫违反了法律。

阅读为什么必须保护Robots协议?,坚守爬虫的法律底线。