爬虫之requests

Posted 王大拿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫之requests相关的知识,希望对你有一定的参考价值。

requests

Python标准库中提供了:urllib、urllib2、httplib等模块以供Http请求,但是,它的 API 太渣了。它是为另一个时代、另一个互联网所创建的。它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务。

Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,从而使得Pythoner进行网络请求时,变得美好了许多,使用Requests可以轻而易举的完成浏览器可有的任何操作。

一:Python的requestcontent和text的区别

结论
resp.text返回的是Unicode型的数据resp.content返回的是bytes型也就是二进制的数据。
实地的应用
也就是说,如果你想取文本,可以通过r.text。
如果想取图片,文件,则可以通过r.content。
(resp.json()返回的是json格式数据)

响应中的参数和对应的数据内容

r.status_code #响应状态码
r.raw #返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read() 读取
r.content #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩
r.text #字符串方式的响应体,会自动根据响应头部的字符编码进行解码
r.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
#*特殊方法*#
r.json() #Requests中内置的JSON解码器
r.raise_for_status() #失败请求(非200响应)抛出异常

 

1、GET请求

  1.无参数的实例

  

#encoding=utf-8
import requests

ret=requests.get(https://www.autohome.com.cn/news/)
print(ret.apparent_encoding)
# 打印结果如下:GB2312,此参数能够打印出网页的编码格式
ret.encoding=ret.apparent_encoding
#这个是设置解析的形式,一般这样写就能够动态按照网页的编码格式来解析获取的数据
# print(ret.content)
# print(ret.text)
print(ret.cookies)
ret1=ret.text

 2.POST请求

ret1=requests.post(
    url=https://dig.chouti.com/login,#提交数据走那个url
    data={"phone": "8617701205345", "password": "huoxianyu", "oneMonth": "1"},#提交数据的内容
    headers={
        User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/63.0.3239.132 Safari/537.36
    }, #请求头中添加的内容
    cookies=cookies1,#cookies的值,跟着请求一起发送过去
)

3、其他请求

requests.get(url, params=None, **kwargs)
requests.post(url, data=None, json=None, **kwargs)
requests.put(url, data=None, **kwargs)
requests.head(url, **kwargs)
requests.delete(url, **kwargs)
requests.patch(url, data=None, **kwargs)
requests.options(url, **kwargs)
  
# 以上方法均是在此方法的基础上构建
requests.request(method, url, **kwargs)

4、更多参数

 

官方文档:http://cn.python-requests.org/zh_CN/latest/user/quickstart.html#id4

BeautifulSoup

BeautifulSoup是一个模块,该模块用于接收一个HTML或XML字符串,然后将其进行格式化,之后遍可以使用他提供的方法进行快速查找指定元素,

从而使得在HTML或XML中查找指定元素变得简单

 

解析HTML格式的字符串
           pip3 install beautifulsoup4
           
           soup = BeautifulSoup(<html>....</html>,"html.parser")#第一个参数就是上边通过requests获取的数据,第二个参数是解析器,公司一般用的是lxml
           
           div = soup.find(name=标签名)
           div = soup.find(name=标签名,id=i1)
           div = soup.find(name=标签名,_class=i1)
           div = soup.find(name=‘div‘,attrs={‘id‘:‘auto-channel-lazyload-article‘,‘class‘:‘id‘})   #第二个参数是设置这个标签中包含的属性和对应的值
            
           div.text   #打印此标签内的文本内容
           div.attrs 
           div.get(href) #获取标签内的属性
           
            
           divs = soup.find_all(name=标签名)  #find_all获取的数据是一个列表
           divs = soup.find_all(name=标签名,id=i1)
           divs = soup.find_all(name=标签名,_class=i1)
           divs = soup.find_all(name=div,attrs={id:auto-channel-lazyload-article,class:id})
           
           divs是列表
           divs[0]

 

以上是关于爬虫之requests的主要内容,如果未能解决你的问题,请参考以下文章

爬虫之request模块

Python爬虫之request模块

Python爬虫之Requests库入门

04,Python网络爬虫之requests模块

python-爬虫之requests模块介绍(登陆github)

爬虫之Scarpy.Request