学习爬虫day02

使用代理ip

  • 准备一堆的ip地址,组成ip池,随机选择一个ip来使用

  • 如何选择代理ip, 让使用次数较少的ip地址更大可能性被使用到

    • {“ip”:ip,“times”:0}
    • [{},{},{},{}],对这个ip列表进行排序,按照使用次数进行排序
    • 选择使用次数较少的10个ip,从中选择一个
  • 检查ip的可用性

    • 可以使用requesrs添加超时参数,判断ip地址的质量
    • 在线代理ip质量检测网站

携带cookie请求

  • 携带一堆cookie进行请求,把cookie组成cookie池

使用requests提供的session类来请求登录之后的网站思路

  • 实例化一个session
  • 先使用session发送请求,登录对应网站,吧cookie保存在session
  • 再使用session请求登录之后才能访问的网站,session能够自动携带登录成功时保存字啊期中的cookie,进行请求

不发送post请求,使用cookie获取登录的页面

  • cookie过期时间很长的网站
  • 在cookie过期之前能够拿到数据,比较麻烦
  • 配合其他程序一起使用,其他程序专门获取cookie,当前程序专门请求页面

获取登录后的页面的三种方式

  • 实例化session,使用session发送post请求,在使用它获取登录后的页面
  • header中添加coolie键,值为cookie字符串
  • 在请求方法添加cookie参数,接受字典 形式的cookie。字典形式的cookie中的键是cookie的name对应的值,值是cookie终的value对应的值

字典推导式列表推导式

  • 字典:{i:i+10 for i in range(10)}
  • 字典是无序的
  • 列表: [i for i in range(10)]
cookies = "anonymid=kdear8fg-7pw60h; depovince=GW; _r01_=1; taihe_bi_sdk_uid=cd55da6e8f9997e2eb7ce7f78ea01507; __utmz=151146938.1596448156.1.1.utmcsr=renren.com|utmccn=(referral)|utmcmd=referral|utmcct=/SysHome.do; __utma=151146938.1542855537.1596448156.1596448156.1596448156.1; wp_fold=0; JSESSIONID=abc3AeTrOqm1k7AuIYZox; ick_login=7a54bce4-6251-4522-a4d2-267438300bea; taihe_bi_sdk_session=259fcd2f3037ceb6f68339025ac997a0; __utmc=151146938; ick=59a128d4-002e-4652-bf4a-c3460716d440; first_login_flag=1; ln_hurl=http://head.xiaonei.com/photos/0/0/men_main.gif; __utmt=1; __utmb=151146938.14.10.1596448156; ln_uact=2031058091@qq.com; jebecookies=582e1e95-0253-4621-ae65-fdcf2b437d0e|||||; _de=609C0E1476FC863817DDA621B1A555F76DEBB8C2103DE356; p=94c0ade056133b6f95deb0985975e2b07; t=81cd4d25ee087423f1d22d54ffad66957; societyguester=81cd4d25ee087423f1d22d54ffad66957; id=348632857; xnsid=4c3162e8; loginfrom=syshome"

# 字典推导式  split()  按什么分割字符串
cookies = {i.split("=")[0]:i.split("=")[1] for i in cookies.split("; ")}


# 列表推导式
[self.url_temp.format(i * 50) for i in range(1000)]

寻找登录的post地址

  • 在 form表单中寻找action对应的url地址
    • post的数据是input标签中的name的值作为键,真正的用户名密码作为值的字典,post的url地址就是action对应的url地址
  • 抓包, 寻找登录的url地址
      1. 使用错误的密码,然后看请求的地址
      2. 将Network中的Preserve log选中,防止页面跳转找不到url地址,就会有登录之前跳转的信息
      1. 寻找postpost数据,确定参数
        • 参数不会变, 直接用,比如密码不是动态加密的时候
        • 参数会变
          • 参数在当前响应中
          • 通过js生成

定位想要的js

  • 选择会触发js事件的按钮, 点击 event listener,找到js的位置
  • 通过chrome中的search all file/search 来搜索url中的关键字
  • 通过断点来查看js的操作,通过python来进行同样的操作

requests技巧使用

  • requests.cookie
    • 将cookie对象转化为字典:
      • : requests.utils.dict_from_cookiejar(requests.cookie)
    • 将字典转化成cookie对象
      • :requests.utils.cookiejar_from_dict({“name”:“value”})
    • url地址的解码
      • :requests.utils.unquote()
    • url地址编码
      • : requests.utils.quote()
    • 请求ssl证书验证
      • : requests.get(url, verify=False)
    • 设置超时
      • :response = requests.get(url, timeout=10)
    • 配合状态码判断请求是否请求成功
      • assert reponse.statue_code==200

报错后刷新,进行重新运行 parse_url.py

  • retrying模块

  • 通过装饰器的方式使用

  • @retry(stop_max_attempt_number=3) 即程序报错三次后才会出现异常

    # coding=utf-8
    import requests
    from retrying import retry
    
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"}
    @retry(stop_max_attempt_number=3)
    def _parse_url(url, method, data, proxies):
        """发送请求,获取响应"""
        if method == "POST":
            response = requests.post(url,data=data, headers=headers, proxies=proxies)
        else:
            response = requests.get(url, headers=headers,timeout=3, proxies=proxies)
        assert response.status_code == 200
        return response.content.decode()
    
    
    def parse_url(url, method="GET", data=None, proxies={}):
        """
            异常判断
            method:请求方式
            data:数据
            proxies:代理ip
        """
        try:
            html_str = _parse_url(url, method, data, proxies)
        except:
            html_str = None
        return html_str
    
    
    if __name__ == '__main__':
        url = "http://www.baidu.com"
        print(parse_url(url))
    

安装第三方模块

  • pip install ***
  • 下载源码解码,进入解压后的目录, python setup.py install
  • ***.whl 安装方法 pip install ***.whl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值