我们来一起学Python爬虫吧-第一章requests库

目录

1.安装Requests库

 2.Requests库基本使用方法

GET请求

写入headers参数 

.content保存文件

POST请求

Post上传文件

获取响应数据

 SSL验证错误

身份验证

代理IP

动手练习

按F12键查看源代码

对自己的测试


Hello! 我是PYmili,一个喜欢敲代码的高中生(准确来说是一个小小的职高学生)。在Python中的爬虫模块,可是一个非常有意思的模块和方向。我们可以在网络上采集自己想要的资料或数据,平时只能一条一条复制的数据或下载不了的文件。我们都可以用Python尝试!但是!我们也不能干犯法的事哦!不然就是....你懂的!不仅仅是Python可以写爬虫,其他语言也可以写爬虫!所以爬虫并不是Python独有的。这一期,我们一起来学习requests库的一些用法!


1.安装Requests库

Python中的requests库可是一个非常强大的库!基本的Get和Post请求,文件数据保存等很多功能。可是写爬虫的一把好手!我们来安装它

pip install requests

什么?你不会怎么输入命令?这样这样!

Win键+R键,输入:cmd

 cmd终端输入命令


 2.Requests库基本使用方法

GET请求

import requests

url="http://47.108.189.192"
r=requests.get(url=url)
print(r.text)
print(r.status_code)
print(r.cookies)

requests.get()就是一个向网页发起get请求的方法

其中的 r.text 这个参数就是获取网页HTML源代码的方法。

r.status_code 这个参数获取网页返回状态码如果返回200就是没有出错了!

r.cookies 这个参数就是获取你向网页请求时的cookie码如图

 获取网页json数据

import requests

url="http://47.108.189.192/API/Requests/requests.json"
r=requests.get(url=url)
print(r.json())

但是.text也可以获取网页数据 为什么要用.text呢?看下方实例

博主个人服务器其中一个requests.html文件:47.108.189.192/API/Requests/requests.html

 如果用.text命令去获取网页内容就会使网页json容变成str数据

print(type(r.text))

print(type(r.json()))

如果用.json()就变成json数据。这样就很好处理了。


写入headers参数 

import requests

url="http://47.108.189.192/"

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

r=requests.get(url=url, headers=headers)
print(r.text)

在这段代码里面填写了heraders参数一般网页没有headers参数就无法爬取所以就可以填写User-Agent或Cookies参数。

那么如何获取User-Agent和Cookies参数呢?打开网页按F12键,打开网络选项

图中指出的就是网页原链接请求文件,单击一下它 

里面就有我们想要的所有参数了 


.content保存文件

requests可以保存指定的文件,一般是二进制数据文件。

我们来爬取一张网页图片 tmpfile_03264effc93b4c78848028bca9bb546d.txtmt.jpg (1920×1080) (jsdelivr.net)

import requests
import os

url="https://cdn.jsdelivr.net/gh/PYmili/Image_api/Images/tmpfile_03264effc93b4c78848028bca9bb546d.txtmt.jpg"

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

r=requests.get(url=url, headers=headers)
path,file=os.path.split(url)
try:
    print(url)
    with open(f"{file}", "wb") as f:
        f.write(r.content)
        print("True")
except:
    print("False")

 

 这样文件爬取下来了!怎么样?是不是很简单?


POST请求

 post请求一般用于API请求数据使用,网页上都是get请求post请求就是可以上传参数使服务器或得参数返回

import requests
import os

url="http://httpbin.org/post"

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

data={
    "name":"PYmili",
    "age":"16"
    }#要上传的数据

r=requests.post(url=url, headers=headers, data=data)
print(r.text)

可以看到参数上出现了我们写入的参数,这就是POST请求


Post上传文件

上面说的是Post上传数据,这样我们也可以上传文件。

import requests

url="http://httpbin.org/post"

file={
    "file":open("text.txt", "rb")
    }

r=requests.post(url=url, files=file)
print(r.text)


获取响应数据

requests中我们要写一些请求数据也就是Heraders参数,但是我们也可以获取一些参数

import requests

url="http://47.108.189.192/"


r=requests.get(url=url)
print(r.headers)
print(r.url)

其中我们获取了heraders的参数和url也就是请求的链接。 


 SSL验证错误

由于博主找不到好的案例所以就随便 放一下代码实例一下

import requests

url="https://xxxxx"

r=requests.get(url=url, verify=False)
print(r.status_code)

当报错说SSL错误就可以写上上面参数跳过SSL验证


身份验证

在访问一些网站会遇见需要填写账号密码的情况如: http://httpbin.org/digest-auth/auth/user/pass

 

import requests
from requests.auth import HTTPBasicAuth

url="http://httpbin.org/digest-auth/auth/user/pass"

r=requests.get(url=url, auth=HTTPBasicAuth("username", "password"))
print(r.status_code)

 这样我们就可以填写用户和密码


代理IP

 当我们爬取一个网站时有时会不成功因为反爬机制及网站禁掉你的ip使其获取不到时就可以使用ip代理,但是你得去买一个代理ip。

import requests

proxies={
    "http":"代理ip",
    "https":"代理ip"
    }

url="https://www.baidu.com"

r=requests.get(url=url, proxies=proxies)
print(r.status_code)

动手练习

我们前面的知识学的差不多了,就可以动手学习一下了,接下来我们爬取一个网站的音乐。

警告:此网站是博主和PYahao个人网站,属于个人财产请勿破坏他人财产!

站点:PYmili And PYahao Home你问我为什么没有域名,我没有?因为我没18。真可怜。

这次要用到正则表达式库,博主在前面写了一篇正则表达式的教程可以参考链接:,Python超详细的正则表达式_PYmili的博客-CSDN博客_python正则表达式

按F12键查看源代码

 

我们可以看见一个audio标签,<source src=xxx就是音乐地址了,那么代码可以这样写 

import requests
import re
import os

url="http://47.108.189.192/"

r=requests.get(url=url)
print(r.status_code)
audio=re.search('<source src="(.*?)".*?</audio>', r.text, re.S)
if audio != None:
    _url=audio.group(1).strip('..')
    print(_url)
    req=requests.get(url=_url)
    print(req.status_code)
    try:
        path,file=os.path.split(_url)
        with open(file, "wb")as f:
            f.write(req.content)
            print("True")
    except:
        print("False")
else:
    pass

 

 完美运行代码,欧耶!


对自己的测试

既然都学了那么多了!应该会爬取网页背景图片了吧!PYmili And PYahao Home  爬取此网站的所有背景图片练练手吧!

有什么问题可以联系我们Q群:706128290

我是PYmili,我们下次再见,拜拜!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pymili

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值