Python 爬虫-基本库的使用

基本库的使用

使用 requests

基本用法

实例引入
import requests
r = requests.get('https://www.baidu.com/')
print(type(r))
print(r.status_code)
print(type(r.text))
print(r.text)
print(r.cookies)

请添加图片描述

GET 请求
  • 首先,构建一个最简单的 GET 请求,请求的链接为 http://httpbin.org/get,该网站会判断如果客户端发起的是 GET 请求的话,它返回相应的请求信息:

    import requests
    r = requests.get('http://httpbin.org/get')
    print(r.text)
    

请添加图片描述

import requests

data = {
    'name': 'germey',
    'age': 22
}
r = requests.get('http://httpbin.org/get', params=data)
print(r.text)

请添加图片描述
网页的返回类型实际上是 str 类型,但是它很特殊,是 JSON 格式的。所以,如果想直接解析返回结果,得到一个字典格式的话,可以直接调用 json() 方法

import requests

r = requests.get('http://httpbin.org/get')

print(type(r.text))
print(r.json())
print(type(r.json()))

请添加图片描述

可以发现,调用 json() 方法,就可以将返回结果是 JSON 格式的字符串转化为字典

但需要注意的是,如果返回的结果不是 JSON 格式,便会出现解析错误,抛出 json.decoder.JSONDecodeError 异常

  • 抓取二进制数据

    import requests
    
    r = requests.get('http://github.com/favicon.ico')
    
    with open('favicon.ico','wb') as f:
        f.write(r.content)
    

    这里用了 open() 方法,它的第一个参数是文件名称,第二个参数代表以二进制写的形式打开,可以向文件里写入二进制数据

  • 添加 headers

    通过 headers 参数来传递头信息

    import requests
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
    }
    
    r = requests.get('http://www.zhihu.com/explore', headers=headers)
    
    print(r.text)
    

    当然,我们可以在 headers 这个参数中任意添加其他的字段信息

POST 请求

使用 requests 实现 POST 请求同样非常简单,示例如下:

import requests

data = {
    'name': 'germey',
    'age': 22
}
r = requests.post("http://httpbin.org/post", data=data)
print(r.text)

这是还是请求 http://httpbin.org/post,该网站可以判断如果请求是 POST 方式,就把相关请求信息返回
请添加图片描述

可以发现,我们成功获得了返回结果,其中 form 部分就是提交的数据,这就证明 POST 请求成功发送了

响应

发送请求后,得到的自然就是响应。在上面的实例中,我们使用 text 和 content 获取了响应的内容。此外,还有很多属性和方法可以用来获取其他信息,比如状态码、响应头、Cookies 等,示例如下:

import requests

r = requests.get('http://www.jianshu.com')
print(type(r.status_code), r.status_code)
print(type(r.headers), r.headers)
print(type(r.cookies), r.cookies)
print(type(r.url), r.url)
print(type(r.history), r.history)

这里分别打印输出 status_code 属性得到状态码,输出 headers属性得到响应头,输出 cookies 属性得到 Cookies,输出 url 属性得到 url,输出 history 得到i请求历史

高级用法

文件上传

我们知道 requests 可以模拟提交一些数据。假如有的网站需要上传文件,我们也可以用它来实现,这非常简单,示例如下:

import requests

files = {
    'file':open('favicon.ico','rb')
}
r = requests.post('http://httpbin.org/post',files=files)
print(r.text)

文件上传部分会单独有一个 files 字段来标识

Cookies

先用一个实例看一下获取 Cookies 过程:

import requests

r = requests.get('http://www.baidu.com')
print(r.cookies)

for key, value in r.cookies.items():
    print(key + '=' + value)

运行结果如下:
请添加图片描述

这里我们首先调用 cookies 属性即可成功得到 Cookies,可以发现它是 RequestsCookieJar 类型。然后用 items() 方法将其转化为元组组成的列表,遍历输出每一个 Cookie 的名称和值,实现 Cookie 的遍历解析

当然,我们也可以直接使用 Cookie 来维持登录状态,下面以知乎为例来说明。首先登录知乎,将 Headers 中的 Cookie 内容复制下来,将其设置到 Headers 里面,然后发送请求,示例如下:

import requests

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36',
    'cookie': '_zap=1b5925ce-42e7-4df0-88f9-81b87b3908b1; d_c0="APDfRQTSTRSPTgDPgQbUsYPfSKay356x2ok=|1641599820"; _9755xjdesxxd_=32; _xsrf=G3vlQcsHA20VJgaoNGJFDQGGqbbz0EaI; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1641599822,1641692854,1642040080,1642069199; captcha_session_v2="2|1:0|10:1642069198|18:captcha_session_v2|88:ZkM2VmtzbXd4NklXamYvdUVnUHFGL3ZBQllNbHFtRWxKbXRUSm1ZeHgrTkFwdThiay9JNGRjYytQazNVVS9KVw==|6497f31cdd4c979e09f8a6d2bdcb234cf16772094148e2daffb169ca4d75a7d8"; SESSIONID=9td2XhwiclxSll6UJLIAnrg2JBz1xlRh4VjgPu18pej; __snaker__id=9NqLpytquGYkDiq1; JOID=Wl8VAk_JtM50GI8ANsAHFqeRVlcq_8erQ0zocF6m17Emce85ZA5OFRwbhwYyehZu7UmsGADwlLHefNqtZQC4Cuw=; osd=U18VBUPAtM5zFIYANscLH6eRUVsj_8esT0XocFmq3rEmduMwZA5JGRUbhwE-cxZu6kWlGAD3mLjefN2hbAC4DeA=; gdxidpyhxdE=BRvPGbCe7KH%2F2j9SfmMHd1HwWRU0UnB1mApK7IC9q55upaxUtQPhKeUgKeAuuCT1CgZC71w0TAxNck1MPNfObdMuL%5CpVp0KT%5CIHphh6zqeBni6xT0lNnVWgGQaHuZL12lLkhsvetajmYaMX%5C7%2FHjC3%2BXkQ3Yp6Bm2JUK0BDyvAmck01E%3A1642070099725; YD00517437729195%3AWM_NI=mBE0xhUR8OLpt6OMogHLyJRZEC%2BoBVBLya1nJ26jlmYqMhmfn4mA27j0h5a%2FGH32S6%2BAVr%2FUtB8H6Os9q90TJfKBT3IuXdxoSunxiN8k0dDh0HzRsUnmXF1WeRmDmkKHSHU%3D; YD00517437729195%3AWM_NIKE=9ca17ae2e6ffcda170e2e6ee93b821bbbe9eadbb5aabeb8ea7c85a839e8b85f13e818683ccef7a82ad8695aa2af0fea7c3b92aaf9e8bd1fb64978ef8b0cf7cb8ea81aeee6d8c94b7abd152879de590c15e8294b782b4668aeefa8bef679baf8389f06eaeeca3a2b13daaf0a8d6e4258598fdd3d23ee99f9a93ae5fb89ef8a9b545b1e7bfdab3608aba85a3d7398bab9885fb6591aba299ec46fcb50085c764f498b6b3f25faeb398a7b45da78ea3a5f06189989da9d837e2a3; YD00517437729195%3AWM_TID=pARCxM308NFFAEQVFBZ%2B%2BHNZvg6F4cs%2F; z_c0="2|1:0|10:1642069230|4:z_c0|92:Mi4xa21GM0ZnQUFBQUFBOE45RkJOSk5GQ2NBQUFDRUFsVk43b2tIWWdDWk5waVdmNzlDeEs2a19IeGljSi1jSGg1LUh3|d53537d09526c1b71deb3901afa5194a6be9e9cb283bf94dedbc9158ab13c89c"; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1642069232; ariaDefaultTheme=undefined; tst=r; NOT_UNREGISTER_WAITING=1; KLBRSID=dc02df4a8178e8c4dfd0a3c8cbd8c726|1642069234|1642069198'
}
r = requests.get('https://www.zhihu.com/', headers=headers)
print(r.text)
会话维持

Session 对象,利用它,我们可以方便地维护一个会话,而且不用担心 cookies 问题,它会帮我们自动处理好,示例如下:

import requests

s = requests.Session()
s.get('http://httpbin.org/cookies/set/number/123456789')
r = s.get('http://httpbin.org/cookies')
print(r.text)

运行结果:
请添加图片描述

所以,利用 Session,可以做到模拟同一个会话而不用担心 Cookies 问题。它通常用于模拟登录成功之后再进行下一步的操作

Session 在平常用得非常广泛,可以用于模拟在一个浏览器中打开同一个站点的不同页面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值