Python爬虫从入门到放弃 04 | Python爬虫打响第一炮之请求网页 - Go语言中文社区

Python爬虫从入门到放弃 04 | Python爬虫打响第一炮之请求网页


此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。
本文章纯野生,无任何借鉴他人文章及抄袭等。坚持原创!!

前言

你好。这里是Python爬虫从入门到放弃系列文章。我是SunriseCai。

使用Python爬虫就是以下三个步骤,一个步骤对应一篇文章。

  • 请求网页
  • 获取网页响应,解析数据(网页)(未完成
  • 保存数据 (未完成

本文章就介绍Python爬虫的第一步:请求网页

requests是一个Python HTTP客户端库,使用Python爬虫时少不了它,也是本章的重头戏。

  • requests模块是一个用起来很简单的模块,但经过我的描述,完全偏离了简单这个词。建议略该文章,不看为妙。

requests基本使用

安装requests模块

首先,需要在cmd窗口输入以下命令,安装用于进行网络请求的requests模块。

pip install requests

这里只对requests的基本使用做介绍,更多的知识请点击requests官方文档


requests模块有多种请求方式,这里只对最常用两个请求做介绍,分别是GETPOST请求

方法 描述
requests.get() 请求指定的页面信息,并返回实体主体
requests.post() 向指定资源提交数据进行处理请求(例如提交表单)

下面开始的第一步,是需要先将requests模块导入。

import requests

1) requests.get()

  • 通过GET请求访问一个页面,是很简单的,只需要一行代码。

成功示例:

resp = requests.get('https://www.baidu.com')
print(resp.status_code)	# 200 如果状态码返回值是200 则表示访问成功

失败示例:

resp = requests.get('https://www.douban.com/')  #豆瓣首页
print(resp.status_code)	# 418  这里状态码返回为418,很明显是请求不成功该网址的,下面再说如何处理

2) requests.post()

  • 通过POST请求页面,只需要把get()方法改成post(),然后传入需要提交的数据即可:
  • 这里面的请求,多了一个headers参数,下面会讲他是什么。

示例:

headers = {
	'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36'
	}

data = {
	'name': 'xxx',  	# 账号
	'password': 'xxx'	# 密码
	} 	

# 携带headers与data进行请求
resp = requests.post('https://accounts.douban.com/j/mobile/login/basic', data=data, headers=headers)
print(resp.status_code)	# 200 请求成功
print(resp.text)	# text为获得响应体文本信息 {"status":"success","message":"success","description":"处理成功"...}}

3) 定制headers(请求头)

  • resp = requests.get(‘https://www.douban.com/’),该请求为什么会不成功呢?
  • 部分网站会判断所有请求,如果发现是 python 3.x发送过来的,判断为爬虫,就给Pass掉了
  • 所以这个时候应该给我们的requests请求添加请求头,即将自己伪装成浏览器去进行访问。
  • 如果想为请求添加请求头,只要简单地传递一个 dictheaders 参数就可以了。

再来看看添加了请求头(伪装身份)后的请求结果:

headers = {
	'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36'
	}	# 这里用的是谷歌浏览器的请求头

r = requests.get('https://www.douban.com/', headers=headers)  # 豆瓣首页
print(r.status_code)	# 200  携带headers请求后,访问成功

请求头里还可以添加cookiereferer等参数,这里就不再做介绍,后面的文章中会说道如何使用他们。

4) 响应内容

主要三种方法:

r = requests.get('http://www.xxx.com')
方法 描述 用处
r.text 返回响应体文本信息 文本内容
r.content 返回二进制响应内容 图片、音乐、视频等’
r.json() 返回json内容,将返回内容中的数据以键值对的方式提取出来 json格式的网页

5) 响应状态码

主要分为5大类:

状态码 描述
1** 指示信息–表示请求已接收,继续处理
2** 成功–表示请求已被成功接收、理解、接受
3** 重定向–信息不完整需要进一步补充
4** 客户端错误–请求有语法错误或请求无法实现
5** 服务器端错误–服务器未能实现合法的请求

6) 查看响应头

查看响应头:

resp = requests.get('https://www.baidu.com')
print(resp.headers)
# {'Accept-Ranges': 'bytes', 'Cache-Control': 'no-cache'...}	返回的数据为dict

查看响应头的 Cache-Control:

resp = requests.get('https://www.baidu.com')
print(resp.headers['Cache-Control'])	# no-cache

查看响应头的其它参数通过上。

7) 错误与异常

以下内容引用自requests官方文档

  • 遇到网络问题(如:DNS 查询失败、拒绝连接等)时,Requests 会抛出一个 ConnectionError 异常。
  • 如果 HTTP 请求返回了不成功的状态码, Response.raise_for_status() 会抛出一个 HTTPError 异常。
  • 若请求超时,则抛出一个 Timeout 异常。
  • 若请求超过了设定的最大重定向次数,则会抛出一个 TooManyRedirects 异常。
  • 所有Requests显式抛出的异常都继承自 requests.exceptions.RequestException

requests请求豆瓣电影示例

网页如下图:
在这里插入图片描述
请求代码:

import requests

url = 'https://movie.douban.com/top250'
headers = {
	'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36'
}
resp = requests.get(url=url, headers=headers)
print(resp.text)

返回值如下:

  • requests请求到的源码基本都是HTML文档啦,在下一篇文章中将会介绍如何从HTML文档中提取数据。
<!DOCTYPE html>
<html lang="zh-cmn-Hans" class="">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="renderer" content="webkit">
    <meta name="referrer" content="always">
    <meta name="google-site-verification" content="ok0wCgT20tBBgo9_zat2iAcimtN4Ftf5ccsh092Xeyw" />
    <title>
豆瓣电影 Top 250
</title>


<body>

<ol class="grid_view">
        <li>
            <div class="item">
                <div class="pic">
                    <em class="">1</em>
                    <a href="https://movie.douban.com/subject/1292052/">
                        <img width="100" alt="肖申克的救赎" src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.jpg" class="">
                    </a>
                </div>
                <div class="info">
                    <div class="hd">
                        <a href="https://movie.douban.com/subject/1292052/" class="">
                            <span class="title">肖申克的救赎</span>
                                    <span class="title">&nbsp;/&nbsp;The Shawshank Redemption</span>
                                <span class="other">&nbsp;/&nbsp;月黑高飞()  /  刺激1995()</span>
                        </a>


                            <span class="playable">[可播放]</span>
                    </div>
                    <div class="bd">
                        <p class="">
                            导演: 弗兰克·德拉邦特 Frank Darabont&nbsp;&nbsp;&nbsp;主演: 蒂姆·罗宾斯 Tim Robbins /...<br>
                            1994&nbsp;/&nbsp;美国&nbsp;/&nbsp;犯罪 剧情
                        </p>


                        <div class="star">
                                <span class="rating5-t"></span>
                                <span class="rating_num" property="v:average">9.7</span>
                                <span property="v:best" content="10.0"></span>
                                <span>1758111人评价</span>
                        </div>

                            <p class="quote">
                                <span class="inq">希望让人自由。</span>
                            </p>
                    </div>
                </div>
            </div>
        </li>
		'以下省略'......
</body>

</html>

首先,本文章写的狗屁不通,还请各位笔下留情,建议移步requests官方文档

  • 笔头描述出来的知识,往往不尽人意。
    在这里插入图片描述

最后来总结一下本章的内容:

  1. 介绍了requestsgetpost请求方式
  2. 介绍了requests的添加请求头
  3. 介绍了requests的获取不同响应内容
  4. 介绍了requests的不同状态码
  5. 介绍了requests的查看请求头和错误与异常
  6. 介绍了requests请求豆瓣电影

sunrisecai

  • 感谢你的耐心观看,点关注,不迷路。
  • 为方便菜鸡互啄,欢迎加入QQ群组织:648696280

下一篇文章,名为 Python爬虫从入门到放弃 05 | Python爬虫打响第一炮之解析网页

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_45081575/article/details/103966335
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-02 18:05:50
  • 阅读 ( 1220 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢