栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

爬虫02——requests模块基础

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

爬虫02——requests模块基础

一、requests模块简介

1.是python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高。

2.作用:模拟浏览器发送请求。

3.该如何使用(requests模块的编码流程)

                — 指定url

                — 发送请求

                — 获取响应数据

                — 持久化存储

        主要分为这四步来操作的

4.环境的安装

到本地终端下,输入以下代码,即可安装

pip install requests

        或者在pyCharm首选项里进行设置。

5.实战编码:

               — 需求 :爬取搜狗首页的页面数据

        根据上面的四部流程进行操作

import requests #导入requests模块
if __name__ == "__main__":
    #1.指定url
    url = "https://www.sogou.com/"
    #2. 发起请求,
        #发送请求成功,get方法会返回一个响应对象
    response = requests.get(url=url)
    #3. 获取响应数据
    #以文本的形式给page_txt
    page_txt = response.text
    print(page_txt)
    #4.持久化存储
        #初期先存储到本地文件夹下的sogou.html文件下,以w的格式存入
    with open('./sogou.html', 'w', encoding='UTF-8') as fp:
        fp.write(page_txt)
    print('爬取数据结束!!!')

这样就能获取到网页到所有内容并存入了sogou.html里

     

get和post的区别_萌萌哒小宝宝的博客-CSDN博客get和post的区别主要有以下几方面:1、url可见性:get,参数url可见;post,url参数不可见2、数据传输上:get,通过拼接url进行传递参数;post,通过body体传输参数3、缓存性:get请求是可以缓存的post请求不可以缓存4、后退页面的反应get请求页面后退时,不产生影响post请求页面后退时,会重新提交请求5、传输数据的大小get一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大)post请求传输数据的大小根据php.ini 配https://blog.csdn.net/qq_38889350/article/details/112187977?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165069089016782350944758%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165069089016782350944758&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-112187977.142%5Ev9%5Epc_search_result_control_group,157%5Ev4%5Enew_style&utm_term=get%E5%92%8Cpost%E7%9A%84%E5%8C%BA%E5%88%AB&spm=1018.2226.3001.4187 with open()不了解的可以看看这篇

Python——with open()的用法_m0_48936146的博客-CSDN博客1. 用途:是python用来打开本地文件的,他会在使用完毕后,自动关闭文件,相对open()省去了写close()的麻烦2. 用法:with open(file="你要打开的路径名(或保存内容的地址)",mode="r/w/a",encoding="utf-8") as f: data=f1.read/write() print(data)如果没有指定的路径,会自动新建文件,无需先去新建。2.1 关于mode的三种常用模式:r:只读 用read()w: 只写 用https://blog.csdn.net/m0_48936146/article/details/124360734?spm=1001.2014.3001.5502

 二、requests巩固深入 1、爬取搜狗指定词条对应的搜索结果见面(简单网页采集器)

        引入UA检测和UA伪装

        1.1 动态搜索的设置

                因为看图可以发现query是用于定义搜索参数的,所以可以将query单独封装起来

         1.2 【解析+代码】

#UA: User_Agent(请求载体的身份标识)
#UA检测:门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的载体身份为
#某一款浏览器,则说明该请求是一个正常的请求,但是如果检测到的请求的载体身份标识不是
#某一款浏览器的,则表示该请求为不正常的请求(爬虫),那么服务器端很有可能拒绝这次请求

#所以为了让我们每次都能成功访问,所以必须进行UA伪装,UA检测所对应的策略叫UA伪装
#UA伪装:让爬虫对应的请求载体身份标识伪装成某一款浏览器
import requests
if __name__ == "__main__":
    #UA伪装:将对应的User-Agent封装到一个字典中
    headers = {
        #伪装成了谷歌浏览器
        'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36'
    }
    #1.指定url,转换为动态搜索
        #当我们复制过来url的时候发现是乱码形式
        #但在requests模块当中,这块代码也可以使用中文
        #观察到query后面跟着的是我们搜索的关键词
    #url = "https://www.sogou.com/web?query=%E5%90%83%E4%BB%80%E4%B9%88"
    #url = "https://www.sogou.com/web?query=吃什么"
        # 观察到query后面跟着的是我们搜索的关键词,但上面这样写,是写死的,不是动态的,所以需要对url携带的参数做一些处理
            # 将url携带的参数封装出来,存入字典中实现动态搜索
    url = "https://www.sogou.com/web?"
    kw = input('请输入关键词:')
    param = {
        'query': kw
    }
    #2. 发送请求
        #get有三个参数,上一个案例使用了第一个参数,第二个参数就是我们上面封装的关键词
        #现在对指定的url发起的请求对应的url是携带参数的,并且请求过程中处理了参数
        #get的第三个参数headers是指用get方法发起的请求,所携带的头信息
    response = requests.get(url=url,params=param,headers=headers)

    #3. 获取数据
    page_text = response.text
    #4. 存储
    fileName = kw+'.html' #指定文件名
    with open(fileName,'w',encoding='utf-8') as fp:
        fp.write(page_text)
    print(fileName,'保存成功!!!!')

        【运行结果】

在文件中自动生成了吃什么的html文件

 

2、破解百度翻译

        ——实现输入"dog"时,只抓取这个单词的解析

        2.1 解析

首先可以观察百度翻译页面,输入的单词 和解析是随着我们输入的单词而时时更新了,这就是“阿贾克斯请求”(ajax)的作用,XHR对应的就是阿贾克斯请求的数据包,在XHR下寻找kw为dog的数据包,就获取到了URL的值,并且可以知道对应的请求是POST类型

右击 -> 检查 -> Network -> XHR

可以观察到在阿贾克斯请求下有好几个sug的数据包,点进去就可以观察到,第一个sug存放的是"d"这个值,第二个sug存放的是“do”这个值,最后一个sug所携带的post请求就是我们要的结果值“dog”,所以这个和我们输入的单词数有关,这就是阿贾克斯的实时存入功能 

再看下行的内容,可以看见有一个Content-Type:

这个指的是服务器端响应回客户端的数据类型

通过观察获取到的信息

        -post请求(携带了参数)

                kw=dog 这个kw就是post所携带的参数

        - 响应数据是一组json数据

        2.2 【代码+解析】

import requests
import json #导入json模块
if __name__=="__main__":
    #1. 指定url
    post_url = 'https://fanyi.baidu.com/sug'
    #2. 进行UA伪装
    header = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36'
    }

    #3. post请求参数处理(同get请求一致)
    wd=input()
    data = {
        'kw':wd
    }
    #4. 发送请求
        #post类似与get,第一个参数是url 第二个参数是url所携带的参数,第三个头标签
    response = requests.post(post_url,data=data,headers=header)
    #5. 获取响应数据;json()方法返回的是obj字典对象(如果确认响应数据是json类型的,才可以使用json())
    dic_obj = response.json() #字典对象

    #5. 持久化存储
    fileName=wd+'.json'
    fp=open(fileName,'w',encoding='utf-8')
    #dump()第一个参数是一个变量类型,文件格式存放位置,第三个参数是指是否以ascii码来编译
    json.dump(dic_obj,fp,ensure_ascii=False) #因为导入的有中文所以不能使用ascii码
    print('Over!!!!')

【运行结果】

发现已经抓取成功 

 

 

 

 

    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/829556.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号