my canteen
登录       注册

您现在的位置是:网站首页 > 学无止境

每日一技之requests模块

王伟2020年4月9日909人围观
简介体检爬虫的快乐

requests模块简单应用

requests发送请求

使用 Requests 发送网络请求非常简单。

import requests

然后,尝试获取某个网页

response = requests.get('https://www.baidu.com')

返回一个requests对象

<Response [200]>

我可以查看requests的各种属性

    # status_code状态码 200  404 500 这些状态码我们应该很常见
    response.status_code # res : 200
    # url我们请求的真实地址
    response.url # res : 'https://www.baidu.com/'
    # headers请求头
    response.headers 
    # encoding编码,你可以找出 Requests 使用了什么编码,并且能够使用 .encoding 属性来改变它:
    response.encoding # res:'ISO-8859-1'这种编码是不是没有见过呢?
    # 但是编码对我们有什么影响呢
    print(r.text)
    # 出现了这样的的乱码

    # 这次我们重新对encoding赋值 
    response.encoding = "utf-8" 
    response.encoding # res:"utf-8" 
    print(r.text) 

    response.content
    # content二进制编码读取数据

    response.content.decoding("utf-8")

text 返回的是unicode 型的数据,一般是在网页的header中定义的编码形式。

content返回的是bytes,二级制型的数据。

requests模块可以帮助我们模拟浏览器请求网页,获取我们需要的数据.

我们最常见的两种请求方式GET POST

resquests都可以帮我们实现,接下来开始我们的爬虫之旅

爬取豆瓣电影信息

打开豆瓣首页 并打开开发者模式F12 或者Ctrl+shift+i

elements也就是显示给我们的html页面

我们可以选择自己喜欢的电影类型,注意当你点击时,主页面

并没有刷新,而是局部刷新,我们可以断定是ajax请求

network也就是我们的抓包工具 当然我们还可以使用一些抓包app!

这时我们就可以再次选择电影类型,观察network变化

注意network最下面还有携带数据

response 则是返回给我们的json数据 但是不容易观察

借助json校验工具查看

至此我们利用抓包工具简单的了解了浏览器的请求流程

这次我们开始实现我们的代码

# 请求地址
url = "https://movie.douban.com/j/new_search_subjects?"
# 携带数据
params =  {
    'sort': 'U',
    'range': "0,10",
    'tags':"电影",
    'start': "0",
    'genres': '动作',
}
headers={
    # 伪装成浏览器 可以在开发者工具的headers中找到
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36"
}
发送请求
response = requests.get(url=url, params=params, headers=headers)
# requests内部方法将数据json化
response = response.json()
# 打印json数据
print(response)

但是我们看起来还是乱糟糟的 不方便我们分析

这是我们可以导入pprint 可以说是print的加强版

可以帮助我们格式化输出

from pprint import pprint
pprint(response)

这时我们就可以开心的提取数据了

response = response.json()["data"]
tplt = "{0:50}\t{1:40}"
print(tplt.format("电影名称","评分",chr(12288)))
for  movie  in  response:
    title = movie["title"]
    rate = movie["rate"]
    print(tplt.format(title, rate) )

这样一番简单的操作我们就把数据提取出来了

当然仅仅只有这些数据是远远不够的?怎样获取更多数据呢?

这就需要我们构造请求地址或者观察携带数据找到规律,我们就能获取到大量数据了

还可以练习获取肯德基/星巴克的门店信息,这些网址几乎没有反爬机制,我们很容易得手

但对于一起大网站来说,就需要我们更加深入的学习了

友情提醒大量爬取网站内容会对网站性能造成影响,我们仅供学习使用

路漫漫其修远兮,吾将上下而求索。


文章评论

来说句话吧.... 共有评论数:0条


微信二维码 博主微信 qq二维码 博主QQ
177****8743
7*24小时电话