zoukankan      html  css  js  c++  java
  • 爬虫get()和post()的使用

    一. 爬虫的五个步骤:

    1.需求分析             >由程序员,人工智能完成

    2.找到内容相关的网址        >由程序员完成

    3.根据网址获取网址的返回信息    >使用程序(urllib,requests)完成

    4.定位需要的信息的位置            >使用程序(正则表达式,xpath,css selector)完成

    5.存储内容             >储存到文件系统、数据库(mysql,redis,mongodb)

    二. HTTP/HTTPS

         ———— requests————>

    客户端   HTPP/HTTPS协议    服务器端

        <————response————

    三. requests的请求方法

    get() 从服务器获取信息,但不改变服务器的状态yu

    post() 从服务器获取信息,会改变服务器的状态,常见爬取登录页面

    四. Headers包头的重要信息

    cookie : 在客户端能够储存一些服务器端的信息,如:session_id。与session共同完成身份标志的工作

    user-Agent : 能说明当前使用什么浏览器及版本,给服务器端描述浏览器环境的

    Referer : 说明是从哪个页面跳转过来的,相当于介绍人的身份

    五. 使用get()请求方法

    爬取百度的搜索页面

    # 导入requests模块
    import requests
    
    # 爬虫第三步:根据url获取HTML信息
    response = requests.get('http://www.baidu.com')
    
    # response.text 返回字符串类型的HTML信息
    print(response.text)
    
    # 上面返回的内容遇到了乱码的问题,解决办法:response.encoding指定和爬取网页的相同的编码
    response.encoding = 'utf-8'
    print(response.text)
    
    # response.content 返回二进制(bytes)类型的HTML信息
    print(response.content)
    
    # 爬虫第五步:将获取到的HTML信息保存到文件中
    with open('baidu.html', 'wb') as f:
        f.write(response.content)

    爬取bilibili某个博主的粉丝数量

    import requests
    import json
    
    # 带有需求信息的url
    url = 'https://api.bilibili.com/x/relation/stat?vmid=353840826&jsonp=jsonp'
    
    # 添加headers伪装为浏览器
    headers = {
        'cookie': 'bsource=search_baidu; _uuid=2B3AB92A-201C-2699-895D-54A5F7706AEE40844infoc; buvid3=4457CFAD-EED8-4D63-97D0-4A739D63DA86138402infoc; bfe_id=1e33d9ad1cb29251013800c68af42315; CURRENT_FNVAL=80; blackside_state=1; sid=k9o04web',
        'referer': 'https://space.bilibili.com/353840826/fans/fans',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36',
    }
    
    response = requests.get(url, headers=headers)
    data_json = json.loads(response.text)
    
    # 将数据转换为json格式
    print(data_json)
    print(data_json['data']['follower'])

    六. 使用post()请求方法

    爬取人人网登录信息

    import requests
    import json
    
    # 若需要登录后才能访问的内容,需要登录然后再访问
    # post()请求方法需要实例session类
    session_requests = requests.session()
    
    # 登录url
    url = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=2020951359639'
    
    # post()请求方法需要定义data属性(登录url下的Headers中的Form Data所有内容)
    body = {
        'email': '15836157830',
        'icode': '',
        'origURL': 'http://www.renren.com/home',
        'domain': 'renren.com',
        'key_id': '1',
        'captcha_type': 'web_login',
        'password': '5e34fdfceabda55918f6f75ebb3c97152aa5115a4ce264e7413b9e88a9137811',
        'rkey': '33c14357d55b6ff027dcd56e46cb529e',
        'f': 'http%3A%2F%2Fwww.renren.com%2F973158989%2Fprofile',
    }
    
    response = session_requests.post(url, data=body)
    data_json = json.loads(response.text)
    print(data_json)
    # {'code': True, 'homeUrl': 'http://www.renren.com/home'}
    
    print(data_json['homeUrl'])
    # data_json['homeUrl'] 返回 http://www.renren.com/home
    react = session_requests.get(data_json['homeUrl'], allow_redirects=True)
    # 自动发生重定向 http://www.renren.com/973158989
    print(react.url)
    
    with open('renren.html', 'wb') as f:
        f.write(react.content)
  • 相关阅读:
    java8 Stream排序字段为空排序方法
    SpringBoot使用token简单鉴权的具体实现方法
    性能调优
    TestNG最简单的测试
    TestNG异常测试
    TestNG中如何执行测试
    TestNG的基本注解
    TestNG介绍
    TestNG 环境搭建
    python第四课笔记
  • 原文地址:https://www.cnblogs.com/glz666/p/13826303.html
Copyright © 2011-2022 走看看