zoukankan      html  css  js  c++  java
  • Python网络爬虫之requests模块

    一、简介

    什么是requests模块:

    requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求。功能强大,用法简洁高效。在爬虫领域中占据着半壁江山的地位。

    为什么要使用requests模块

    • 因为在使用urllib模块的时候,会有诸多不便之处,总结如下:
      • 手动处理url编码
      • 手动处理post请求参数
      • 处理cookie和代理操作繁琐
      • ......
    • 使用requests模块:
      • 自动处理url编码
      • 自动处理post请求参数
      • 简化cookie和代理操作
      • ......

    二、使用

    安装:

    • pip install requests

    requests模块的使用流程

    • - 指定url
    • - 发起请求
    • - 获得响应数据
    • - 持久化存储

    案例:

    1、爬取搜狗搜索后的响应页面

    import requests
    
    url = 'https://www.sogou.com/web'
    
    # 处理参数
    wd = input("enter a word: ")
    param = {
        'query':wd
    }
    
    # UA伪装
    # User-Agent 请求头信息。请求载体的身份标识
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.12 Safari/537.36'
    }
    
    # 发起请求
    response = requests.get(url,params=param,headers=headers)
    
    # 获取响应数据
    page_text = response.content
    
    # 持久化存储
    fileName = wd + ".html"
    with open(fileName, 'wb') as f:
        f.write(page_text) 
        
    print(f"{wd}下载成功")
    # 返回对象的属性
    r.headers
    #http响应内容的头部内容,来返回get请求获得网页的头部信息。
    r.status_code
    #http请求的返回状态,200表示连接成功,404表示连接失败
    r.text
    #http响应内容的字符串形式,url对应的页面内容
    r.encoding
    #从HTTP header中猜测的响应内容编码方式
    r.apparent_encoding
    #从内容分析出的响应内容的编码方式(备选编码方式)
    r.content
    #HTTP响应内容的二进制形式

    在爬取并存储图片时urllib模块比较方便

    # 使用urllib模块爬取图片
    from urllib import request
    
    url = "https://gss2.bdstatic.com/9fo3dSag_xI4khGkpoWK1HF6hhy/baike/w%3D268%3Bg%3D0/sign=081aba3563224f4a5799741531ccf76f/c83d70cf3bc79f3d423d2823b4a1cd11738b29c1.jpg"
    request.urlretrieve(url=url, filename='ycy.jpg')

    2、用requests模块发起post请求获取百度翻译后的结果

    import requests
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.12 Safari/537.36'
    }
    url = 'https://fanyi.baidu.com/sug'  # ajax请求
    wd = input("enter a english word: ")
    
    # 参数的处理
    data = {
        "kw": wd
    }
    
    # 发送post请求
    response = requests.post(url=url,data=data,headers=headers)
    
    # 如果确定返回的是json格式的数据,就可以直接.json拿到json对象
    json_data = response.json()
    print(json_data)
    print(type(response.text))

    3、肯德基门店查询

    import requests
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.12 Safari/537.36'
    }
    url = "http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword"
    wd = input('请输入查询地点:')
    
    data = {
        'cname': '',
        'pid': '',
        'keyword': wd,
        'pageIndex': '1',
        'pageSize': '100',
    }
    json_data = requests.post(url=url, data=data, headers=headers).json()
    print(json_data)

    4、爬取化妆品生产许可信息管理系统服务平台http://125.35.6.84:81/xk/,每个公司详情页的数据。

    需求分析: 指定页面的公司,该公司的详情页数据

    # 域名:http://125.35.6.84:81/xk/
    import requests
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.12 Safari/537.36'
    }
    # 首页url
    url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList'
    id_list = []
    start_page= int(input('起始页:'))
    end_page= int(input('结束页:'))
    for i in range(start_page,end_page+1):
        data = {
            'on': 'true',
            'page': str(i),
            'pageSize': '15',
            'productName':'' ,
            'conditionType': '1',
            'applyname': '',
            'applysn': '',
        }
        json_data = requests.post(url=url,data=data,headers=headers).json()
        # print(json_data)
        for item in json_data['list']:
            id_list.append(item["ID"])
            
    # 详情页url
    url2 = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'
    for id_item in id_list:
        data_id = {
            'id': id_item
        }
        json_data2 = requests.post(url=url2,data=data_id,headers=headers).json()
        print(json_data2)
  • 相关阅读:
    Cleaning Up Children Asynchronously
    advacing lnux program 4.1.5 Thread Attributes[copy]
    advacing lnux program Threads Return Value[copy]
    批处理,所有子文件夹下面的所有文件
    .NET连接sybase乱码问题
    Asp.net forms认证遇到的一个奇怪的问题和测试过程
    WCF错误
    wcf超时错误
    gridControl控件显示交叉表
    K3 12.1修改报表Bug
  • 原文地址:https://www.cnblogs.com/zwq-/p/10608389.html
Copyright © 2011-2022 走看看