• 爬虫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)
  • 相关阅读:
    Thinkphp 5.0.15 设计缺陷导致Insert/update-SQL注入 分析
    Thinkphp 3.2.3 parseWhere设计缺陷导致update/delete注入 分析
    Thinkphp <= 5.0.10 缓存getshell复现
    Typecho-反序列化漏洞学习
    Discuz3.4-SSRF-从触发点到构造payload
    php session序列化攻击面浅析
    浅析一款扫描dom-xss的浏览器插件
    sqlmap Bool型&延时型 检测策略分析
    SpringSecurityOauth RCE (CVE-2016-4977) 分析与复现
    k8s之statefulSet-有状态应用副本集控制器
  • 原文地址:https://www.cnblogs.com/glz666/p/13826303.html
Copyright © 2020-2023  润新知