• python 网络爬虫requests模块


     一、requests模块

    requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求。功能强大,用法简洁高效。

    1.1 模块介绍及请求过程

    requests模块模拟浏览器发送请求

    请求流程:指定url --> 发起请求 --> 获取响应对象中存储的数据 --> 持久化存储

    1.2 爬取百度首页

    #!/usr/bin/env python
    # -*- coding:utf-8-*-
    
    import requests
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
    }
    url = 'https://www.baidu.com/'
    
    response = requests.get(url=url)
    response.encoding = 'utf-8'                         # 修改字符编码
    page_text = response.text                           # 获取的类型为字符型<class 'str'>
    
    with open('./baidu.html', mode='w', encoding='utf-8') as f:
        f.write(page_text)
    
    # page_text = response.content                       # 返回二进制数据类型 <class 'bytes'>
    # response.status_code                               # 获取响应状态码
    # response.headers['Content-Type'] == 'text/json'    # 类型是 'text/json' 则可以使用response.json方法
    # response.json                                      # 如果响应头中存储了json数据,该方法可以返回json数据

    1.3 爬取百度指定词条搜索后的页面数据

    #!/usr/bin/env python
    # -*- coding:utf-8-*-
    import requests
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
    }
    url = 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&'
    kw = input('请输入要搜索的内容:')
    param = {'wd': kw}
    response = requests.get(url=url, params=param, headers=headers)
    
    page_text = response.content
    fileName = kw+'.html'
    with open(fileName, 'wb') as fp:
        fp.write(page_text)
        print(fileName+'爬取成功。')

    1.4 获取百度翻译的翻译结果使用post方法

    页面使用的ajax的请求方式,通过浏览器抓包得到请求的地址和提交From表单的内容。

    #!/usr/bin/env python
    # -*- coding:utf-8-*-
    
    import requests
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
    }
    url = 'https://fanyi.baidu.com/sug'
    
    kw = input('请输入要翻译的内容:')
    data = {
        'kw': kw
    }
    response = requests.post(url=url, data=data, headers=headers)
    dic = response.json()
    print(dic['data'])
    -----------------------------------执行结果-------------------------------------- 请输入要翻译的内容:美女 [{'k': '美女', 'v': '[měi nǚ] beauty; belle; beautiful woman; femme fat'}, {'k': '美女与野兽', 'v': '名 Beauty and the Beast;'}, {'k': '美女蛇', 'v': 'merino;'}] --------------------------------------------------------------------------------

     1.5 爬取豆瓣电影排名电影

    #!/usr/bin/env python
    # -*- coding:utf-8-*-
    
    import requests
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
    }
    
    url = 'https://movie.douban.com/j/chart/top_list'
    
    param = {
        'type': '5',
        'interval_id': '100:90',
        'action': '',
        'start': '0',
        'limit': '20'
    }
    
    json_data = requests.get(url=url, headers=headers, params=param).json()
    
    print(json_data)

  • 相关阅读:
    Android 创建Library Project(库项目)与引用操作
    Android插件化(二):使用DexClassLoader动态载入assets中的apk
    洛谷P3388 【模板】割点(割顶)(tarjan求割点)
    BZOJ 1179: [Apio2009]Atm(tarjan+SPFA)
    洛谷P1067 多项式输出(模拟)
    洛谷P2118 比例简化(暴力)
    BZOJ 3714: [PA2014]Kuglarz(最小生成树)
    BZOJ 4289: PA2012 Tax(最短路)
    BZOJ 4152: [AMPPZ2014]The Captain(最短路)
    洛谷P2939 [USACO09FEB]改造路Revamping Trails(最短路)
  • 原文地址:https://www.cnblogs.com/cyleon/p/10577791.html
Copyright © 2020-2023  润新知