小白也能懂的Python爬虫之Requests 库的介绍和操作实例

一、什么是爬虫?

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

其实通俗的讲就是通过程序去获取web页面上自己想要的数据,也就是自动抓取数据。

你可以爬去妹子的图片,爬取自己想看看的视频。。等等你想要爬取的数据,只要你能通过浏览器访问的数据都可以通过爬虫获取

二、爬虫的本质

模拟浏览器打开网页,获取网页中我们想要的那部分数据

浏览器打开网页的过程:

当你在浏览器中输入地址后,经过DNS服务器找到服务器主机,向服务器发送一个请求,服务器经过解析后发送给用户浏览器结果,包括html,js,css等文件内容,浏览器解析出来最后呈现给用户在浏览器上看到的结果

所以用户看到的浏览器的结果就是由HTML代码构成的,我们爬虫就是为了获取这些内容,通过分析和过滤html代码,从中获取我们想要资源(文本,图片,视频.....)

三、爬虫的基本流程

发起请求

通过HTTP库向目标站点发起请求,也就是发送一个Request,请求可以包含额外的header等信息,等待服务器响应

获取响应内容

如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能是HTML,Json字符串,二进制数据(图片或者视频)等类型

解析内容

得到的内容可能是HTML,可以用正则表达式,页面解析库进行解析,可能是Json,可以直接转换为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理

保存数据

保存形式多样,可以存为文本,也可以保存到数据库,或者保存特定格式的文件

四、什么是Requests

Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库

如果你看过上篇文章关于urllib库的使用,你会发现,其实urllib还是非常不方便的,而Requests它会比urllib更加方便,可以节约我们大量的工作。(用了requests之后,你基本都不愿意用urllib了)一句话,requests是python实现的最简单易用的HTTP库,建议爬虫使用requests库。

默认安装好python之后,是没有安装requests模块的,需要单独通过pip安装

五、Requests 库的基础知识

我们通过调用Request库中的方法,得到返回的对象。其中包括两个对象,request对象和response对象。

request对象就是我们要请求的url,response对象是返回的内容

六、Requests的安装

1.强烈建议大家使用pip进行安装:pip insrall requests

2.Pycharm安装:file-》default settings-》project interpreter-》搜索requests-》install package-》ok

七、Requests库实的操作例

1、京东商品的爬取--普通爬取框架

import requests

url = "https://item.jd.com/2967929.html"

try:

    r = requests.get(url)

    r.raise_for_status()

    r.encoding = r.apparent_encoding

    print(r.text[:1000])

except:

    print("爬取失败!")

2、亚马逊商品的爬取--通过修改headers字段,模拟浏览器向网站发起请求

import requests

url="https://www.amazon.cn/gp/product/B01M8L5Z3Y"

try:

    kv = {'user-agent':'Mozilla/5.0'}

    r=requests.get(url,headers=kv)

    r.raise_for_status()

    r.encoding=r.apparent_encoding

    print(r.status_code)

    print(r.text[:1000])

except:

    print("爬取失败")

3、百度/360搜索关键词提交--修改params参数提交关键词

import requests

url="http://www.baidu.com/s"

try:

    kv={'wd':'Python'}

    r=requests.get(url,params=kv)

    print(r.request.url)

    r.raise_for_status()

    print(len(r.text))

    print(r.text[500:5000])

except:

    print("爬取失败")

4、网络图片的爬取和存储--结合os库和文件操作的使用

import requests

import os

url="http://tc.sinaimg.cn/maxwidth.800/tc.service.weibo.com/p3_pstatp_com/6da229b421faf86ca9ba406190b6f06e.jpg"

root="D://pics//"

path=root + url.split('/')[-1]

try:

    if not os.path.exists(root):

        os.mkdir(root)

    if not os.path.exists(path):

        r = requests.get(url)

        with open(path, 'wb') as f:

            f.write(r.content)

            f.close()

            print("文件保存成功")

    else:

        print("文件已存在")

except:

    print("爬取失败")

最后:异常处理

在你不确定会发生什么错误时,尽量使用try...except来捕获异常所有的requests exception:

import requests

from requests.exceptions import ReadTimeout,HTTPError,RequestException

try:

    response = requests.get('http://www.baidu.com',timeout=0.5)

    print(response.status_code)

except ReadTimeout:

    print('timeout')

except HTTPError:

    print('httperror')

except RequestException:

    print('reqerror')

你可能感兴趣的:(小白也能懂的Python爬虫之Requests 库的介绍和操作实例)