• Python爬虫(requests模块)


     Requests是唯一的一个非转基因的Python HTTP库,人类可以安全享用。

    Requests基础学习

    使用方法:

    1.导入Requests模块:

    import requests
    

    2.尝试用get获取某个页面,以百度为例子

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

    r是一个response对象。可以从这个对象中获取所有想要的信息。

     发送简单get的请求:

    response.text和response.content的区别:

    response.text

    • 返回类型:str
    • 解码类型:根据HTTP头部对响应的编码作出有根据的推测的文本编码
    • 如何修改编码方式:response.encoding = 'gbk'

    response.content

    • 返回类型:bytes
    • 解码类型:没有指定
    • 如何修改编码方式:response.content.decode('ut8-f')

    实例:获取百度图片

    import requests
    url = 'https://www.baidu.com/img/bd_logo1.png'
    response = requests.get(url)
    with open('baidu.png','wb') as p:
        p.write(response.content)
    

    发送带header的get请求:

     发送带参数的get请求:

    实战(贴吧爬虫):

    import requests
    
    class TiebaSpider:
        #构造函数,传入想要查询的贴吧名字和查询前num页,定义后面方法需要用的属性
        def __init__(self,tieba_name,tieba_num):
            self.tieba_num = tieba_num
            self.tieba_name = tieba_name
            #下面为url访问的格式,kw为贴吧名,pn为代表页数,贴吧可查首页pn=0,第一页50,第二页100,以此类推
            self.url_temp = "https://tieba.baidu.com/f?kw=" + tieba_name + "&ie=utf-8&pn={}"
            #模仿网页访问贴吧
            self.headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 "
                            "(KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"}
    
        #获取url列表
        def get_urlList(self):
            url_list = []
            for i in range(self.tieba_num):
                url_list.append(self.url_temp.format(i * 50))
            return url_list
    
        #访问网页,解析网页,返回
        def parse_url(self,url):
            response = requests.get(url,headers=self.headers)
            return response.text #或者response.content.decode('utf-8')
    
        #保存网页
        def save_html(self,html_str,page_num):
            file_path = "{}-第{}页.html".format(self.tieba_name,page_num)
            with open(file_path,'w',encoding='utf-8') as f:
                f.write(html_str)
    
        def run(self):
            url_list = self.get_urlList()
            for url in url_list:
                html_str = self.parse_url(url)  #保存的内容
                page_num = url_list.index(url) + 1  #文件的页码
                self.save_html(html_str,page_num)
    
    def main():
        tieba_name = input('请输入想查询的贴吧名:')
        tieba_num = int(input('请输入想要查询前几页:'))
        tieba = TiebaSpider(tieba_name, tieba_num)
        tieba.run()
    
    if __name__ == '__main__':
        main()
    

    Requests深入学习

    发送post请求

    哪些地方我们会用到POST请求:

    • 登录注册(POST比GET更安全)
    • 需要传输大文本内容的时候(POST请求对数据长度没有要求)
    • 所以同样的,我们的爬虫也需要在这两个地方回去模拟浏览器发送post请求

    使用代理

    为什么爬虫需要使用代理

    • 让服务器以为不是同一个客户端在请求
    • 防止我们的真实地址被泄漏,防止被追究

    用法:request.get('http://www.baidu.com',proxies = proxies)

    proxies的形式:字典

    proxies = {

      "http" : "http://12.34.56.79:9527",

      "https" : "http://12.34.56.79:9527",

    }

    步骤:

    • 准备一堆IP地址,组成ip池,随机选择一个ip来使用
    • 随机选择代理ip,让使用次数较少的ip地址有更大的可能性被用到
      • {"ip" : ip,"time",0}
      • [{},{},{},{},]对这个ip列表进行排序,按照使用次数进行排序
      • 选择使用次数较少的10个ip,从中随机选择一个
    • 检查ip的可以性
      • 可以使用requests添加超时参数,判断ip地址的质量
      • 在线代理ip质量检测的网站

    爬虫处理cookie和session

    带上cookie,session的好处:

      能够请求到登录之后的页面

    带上cookie,session的弊端:

      一套cookie和session往往和一个用户对应,请求太快或者太多,容易被服务器识别为爬虫

    不需要cookie的时候尽量不去使用cookie

    处理cookies,session请求

    requests提供了一个叫session类,来实现客户端和服务端的会话保持

    使用方法:

    1.实例化一个session对象

    2.让session发送get或者post请求

    session = requests.session()

    cookies = {cookies字典}

    response = session.get(url,headers=headers,cookies=cookies)

     

  • 相关阅读:
    Seafile和Nextcloud相比较哪个好用
    opencv3.1+cmake+mingw5.3+QT5编译
    算法导论第三版--动态规划与贪心算法
    Linux 网卡特性配置ethtool详解
    算法导论第三版--红黑树
    算法导论第三版--二叉搜索树
    realloc在aarch64_be-gcc的奇怪表现
    算法导论第三版--桶排序
    算法导论第三版--计数,基数排序
    算法导论第三版--插入排序和归并排序
  • 原文地址:https://www.cnblogs.com/hhs1998/p/11844048.html
Copyright © 2020-2023  润新知