• 学会使用ip池和cookie池伪装


    在进入正题之前,我们先复习一个关于requests模块的相关知识点:

    requests中解决编码的三种方法:

    ①response.content

    类型:bytes

    解码类型:没有指定

    如何修改编码方式:response.content.decode()

    ②response.content.decode()

    类型:str

    解码类型:解码成python文本的字符串类型

    如何修改编码方式:respsonse.content.decode(encoding="utf-8")

    ③response.txt

    类型:str

    解码类型:根据HTTP头部对响应的编码作出有根据的推测,推测的文本编码。

    如何修改编码方式:response.encoding="gbk"

    所以,综上所述,最好的方式就是使用response.content.decode()来获取响应的html页面。

    那么现在,回到正题:

    我们做爬虫的时候,一定要学会伪装自己。

    因为一旦有一天,你不采取措施,但是你需求的量多,频率也快,是很容易被识别为爬虫的,从而对你拦截处理。

    思路很简单,就是我一个人模拟多个人,那么从人的属性分析:

    浏览器名称,ip地址,cookie和session信息。

    所以我们写爬虫的时候,要准备一堆User-Agent,一堆ip地址和一堆cookie信息。

    ①使用代理ip
    ip参数是proxies,依旧是字典的形式{"http":"http://www.baidu.com"}
     
    ip的选择
    -准备一堆的ip地址,组成ip池,使用代理时随机选择一个ip使用。
    -{"ip":"times":0}
    -[{},{},{},{}],对这个ip地址的列表进行排序,按照使用次数进行那个排序。
    -选择使用次数较少的10个ip,从中随机选择一个。

    检查ip的可用性
    -可以使用requests添加超时参数,判断ip地址的质量
    -在线代理ip质量检测的网站
     
    import requests
    proxies={"http":"http://132.232.52.79:80"}       #选择代理IP地址的时候,要选对跟自己网络符合的端口哦,否则就是407
    headers={"User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1"}
    url="http://www.baidu.com"

    response=requests.get(url,proxies=proxies,headers=headers)
    print(response.status_code)
     
     
    ②使用cookie和session
     
    cookie存放在客户的浏览器上,session数据放在服务器上。
    一组cookie和session的信息对应于一个用户的信息。
    使用过快过多会被识别会爬虫。
    但是要获取登陆之后的页面,必须发送带有cookies的请求。
     
    携带cookie请求
     
    跟ip池一样的是,这次需要携带一堆cookie进行请求,把cookie组成cookie池。
     
    使用requests提供的session类来请求登陆之后的网站的思路
     
    实例化sessin,
    先使用session发送post请求,登录到正确的网站,把cookie保存在session中,
    再使用session请求get登陆之后才能访问的网站,session能够自动地携带登录成功时保存在其中的cookie,进行请求。
     
    import requests

    session=requests.session()
    url="http://www.renren.com/SysHome.do"
    data={"email":"177********","password":"***123456789"}
    headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6814.400 QQBrowser/10.3.3005.400"}
    #使用session发送post请求,cookie保存在其中
    session.post(url,data=data,headers=headers)
    #使用session进行登陆之后才能访问的地址
    response=session.get("http://www.renren.com/969398979/profile",headers=headers)

    #保存页面
    with open("renrenwang.html","w",encoding="utf-8") as f:
        f.write(response.content.decode())
     
    cookie和session的使用思路,我再复述一遍:
    首先实例化一个session,然后准备好post请求的表单内容,里面包含账号密码等登陆信息。
    然后用session发送post请求,登陆上网站,这个时候已经完成cookie和session的自动保存。
    于是就再用session直接发送get请求,登陆上一个需要登陆账号密码的网页,这个时候,依旧能访问成功。
     
    值得一提的是,这个过程可以简化,当遇到一下三种情况的时候:
    1.cookie过期时间很长的网站
    2.在cookie过期之前能够拿到所有的数据,比较麻烦
    3.配合其他程序一起使用,其他程序专门获取cookie,当前程序专门请求页面
    我们可以直接加入cookie信息,直接登陆上去。方法是和headrs字典一样的,创造一个cookie字典放进去,然后get请求里面放一个cookies参数。
    具体过程我就不放代码了,结合headers类似的方法应该都懂。
     
     
     
    总结一下今后的爬虫之路,就是准备一堆浏览器名称,一堆IP地址和一堆cookie信息,做到对自己的完美伪装。
  • 相关阅读:
    课后作业 day19
    day 18
    博客整理day17 time/datetime/re/random/hashlib/hmac/requests
    博客整理day16 os/sys/json/pickle/logging模块
    博客整理day15 模块
    课后作业 day14
    博客整理day14 匿名函数/内置函数/异常处理/面对象
    博客整理day13
    [Day20]Map接口、可变参数、Collections
    [Day19]Collection接口中的子类(List集合、Set集合)
  • 原文地址:https://www.cnblogs.com/Masterpaopao/p/10251861.html
Copyright © 2020-2023  润新知