python爬虫1——Requests库

1/

我相信,大家既然想学python,那必然对爬虫有一定的了解,

爬虫,是一门技术,大多数编程语言都能写爬虫。但是,为什么这么多人会选择学习python来写爬虫程序呢?python的魅力就来了,大家用Java,用c写一份爬虫,可能需要几百行代码,但是用python可能就几十行甚至十几行就解决了。为什么呢?因为python有很多库。那么我们的起点就是在巨人的肩膀上往上爬。那必然是轻松了很多。

今天给大家先介绍一个爬虫用到的一个模块 requests库

requests库的介绍

requests是python中的第三方库,他是基于urllib,在比其他编程语言编写爬虫时,可以节约我们大量的工作,完全满足HTTP测试需求。

requests库的安装

安装requests库不着重介绍

pip install requests

安装完requests库之后就能正常使用,导入了。

requests.get()方法

requests.get()是获取HTML网页的主要方法,对应于HTTP的GET

在编写代码时,是近乎是最不可或缺的一方法。

下面为示例:

import requests
r = requests.get('http://www.baidu.com')  # 获取url网址
print(r.status_code)  # 查看访问的状况200为正常404失败
print(r.text)  # 打印获取到的源代码
r.encoding = "utf8"  # 编码方式改为utf8
print(r.text)

我相信通过此代码,大家对requests.get()方法有一定的了解.

respose对象的属性

r.status_code

r.status_code在上文的代码中,也对其有一定的了解.。r.status_code是HTTP请求的反回状态,200表示连接成功,404表示失败

r.text

r.text是HTTP响应内容的字符串形式,既,url对应的页面内容

r.encoding

r.encoding是从HTTP header中猜测的响应内容编码方式。//若不更改,在访问一些网页时会出现中文乱码。

r.apparent_encoding

r.apparent_encoding是从内容中分析出的响应内容编码方式(备选编码方式)

r.content

r.content是HTTP响应内容的二进制形式。在网页中,存储图片、音频、视频等就是用二进制形式存储的。这个属性通常用于爬取这些资源。

requests库的异常

requests.ConnectionError 为网络连接错误异常,如DNS查询失败、拒绝连接等

requests.HTTPError 为HTTP错误异常

requests.URLRequired 为URL缺失异常

requests.TooManyRedirects 为超过最大重定向次数,产生重定向异常

requests.ConnectTimeout 为连接远程服务器超时异常

requests.Timeout 为请求URL超时,产生超时异常 



爬取网页的通用代码框架

import requests
# 爬取原代码函数
def getHTMLText(url):
    try:
        r = requests.get(url,timeout = 30) # 访问url
        r.raise_for_status() # 查看访问状态,看看200为成功 404失败
        r.encoding = r.apparent_encoding  # 编码方式改为分析来到编码方式
        return r.text
    except:
        return "产生异常"
if __name__ == '__main__':
    url = "http://www.python123.io"
    text = getHTMLText(url)
    print(text)

requests.request(method,url,**kwargs)

其中**kwargs:控制访问的参数,均为可选项

params: 字典或字节序列,作为参数添加到url中

data :字典、字节序列或者文件对象,作为Request内容

json :JSON格式的数据,作为Request的内容

kv = {'key1':'value1'}
r = requests.request('POST','http://www.baidu.com',json = kv)

headers :字典,HTTP定制头

cookies : 字典或CookieJar,Request中的cookie

auth :元组,支持HTTP认证功能

files:字典类型、传输文件

timeout :设定超时时间,秒为单位
proxies : 字典类型,设定访问代理服务器,可以增加登录认证

pxs = {'http':'http://user:[email protected]:1234',
       'https':'https//10.10.10.1:4321'}
r = requests.request('GET','http://www.baidu.com',proxies = pxs)

allow_redirects : True/False,默认为True,重定向开关

stream:True/False,默认为True,获取内容立即下载开关

verify : True/False ,默认为True,认证SSL证书开关

cert:本地SSL证书路径

全代码

import requestsb
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() # 当访问状态不是200时会抛出异常
    r.encoding = r.apparent_encoding
    print(r.text[1000:2000])
except:
    print("爬取失败")

百度搜索全代码

import requests
keyword = "python"
try:
    kv = {'wd',keyword}
    r = requests.get("http://www.baidu.com/s",params=kv)
    print(r.request.url)
    r.raise_for_status()
    print(len(r.text))
except:
    print('爬取失败')

图片爬取全代码

import requests
import os
# 1.获取url

def getImage(url, root):
    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)
            r.encoding = r.apparent_encoding
            print(r.encoding)
            print(r.status_code)
            print(r.headers)
            with open(path,'wb') as f:
                f.write(r.content)
                f.close()
                print("保存成功")
    except:
        print("产生错误了")


if __name__ == '__main__':
    url1 = 'https://img-pre.ivsky.com/img/bizhi/pre/201911/20/love_live.jpg'
    root = 'D://pics//'
    getImage(url1,root)

爬取图片的源代码,也可以用来爬取音频,视频等

IP地址查询全代码

import requests
url = "http://m.ip138.com/ip.asp?ip="
try:
    r = requests.get(url+'192.168.30.100')
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text[-500:])
except:
    print("爬取失败")

通过此文章,我相信,大家对python中的requests库有了一定的了解,后续会给大家进一步的完善其python爬虫知识。beautifulsoup等模块

猜你喜欢

转载自blog.csdn.net/qq_64047342/article/details/122630423