• 爬虫入门三(代理和cookie)


    1、代理

    概念

    • 代理概念:代理服务器。
    • 作用:接受请求==》请求转发。
    • 代理和爬虫之间的关联:
      • 可以使用请求转发的机制使得目的服务器接收到的请求对应ip的一个改变。
    • 为什么要使用代理改变请求的ip地址?
      • 爬虫程序在短时间内对指定的服务器发起了一个高频的请求,则请求对应的ip可能会被目的服务器禁止。
    • 代理的一些基础知识:
      • 代理的匿名度:
        • 透明代理:目的服务器知道你使用了代理机制并且也知道你的真实IP
        • 匿名代理:知道使用了代理机制,但是不知道你的真实ip
        • 高匿代理:不知道使用了代理,也不知道你的真实ip
      • 代理的类型:
        • http
        • https
    • 免费代理ip:
      • 快代理
      • 西祠代理
      • www.goubanjia.com
      • 代理精灵

    示例1:测试代理是否会生效

    #准备:
        #代理ip和端口号
        #测试的过程
    import requests
    url = 'https://www.baidu.com/s?ie=utf-8&wd=ip'
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
    }
    page_text = requests.get(url=url,headers=headers,proxies={'https':'112.195.96.115:32092'}).text
    with open('./ip.html','w',encoding='utf-8') as fp:
        fp.write(page_text)
    # 通过谷歌浏览器中 设置 代理设置 来设置代理ip 再从百度中搜索ip 观察是否变化
    

    示例二:对西祠代理发起一个高频的请求,使得本机ip被禁止,然后采用代理池解决代理的反爬

    • 代理池的构建:就是一个列表,列表中存储的是字典。每一个字典存储的键值{'http':'ip:port'}
    #线程池
    all_ips = []
    url = 'http://t.11jsq.com/index.php/api/entry?method=proxyServer.generate_api_url&packid=1&fa=0&fetch_key=&groupid=0&qty=30&time=1&pro=&city=&port=1&format=txt&ss=3&css=&dt=1&specialTxt=3&specialJson=&usertype=2'
    page_text = requests.get(url,headers=headers).text
    tree = etree.HTML(page_text)
    ip_list = tree.xpath('//body//text()')[0].split('
    ')
    for ip in ip_list:
        dic = {
            'https':ip
        }
        all_ips.append(dic)
    
    # 对西祠代理发起一个高频的请求 并使用线程池
    from lxml import etree
    import random
    url = 'https://www.xicidaili.com/nn/%d'
    ips = []
    for page in range(1,3):
        new_url = format(url%page)
        page_text = requests.get(new_url,headers=headers,proxies=random.choice(all_ips)).text
        tree = etree.HTML(page_text)
        #在xpath表达式中一定不可以出现tbody标签
        tr_list = tree.xpath('//*[@id="ip_list"]//tr')[1:]
        for tr in tr_list:
            ip = tr.xpath('./td[2]/text()')[0]
            ips.append(ip)
    print(len(ips))、cookie
    

    2、cookie的处理

    请求头中重要的头信息
        User-Agent  
        Cookie
        Referer
    
    #cookie的处理
    	#手动处理
    		#将cookie作用到headers中即可
    #自动处理
    	#session = requests.Session()
    	#session的作用:
        #session可以像requests模块一样调用get和post进行请求发送
        #在进行请求发送的过程中如果产生了cookie,则cookie会被自动存储到session对象中。
    

    示例1:对雪球网中的新闻数据进行爬取

    # https://xueqiu.com/,对雪球网中的新闻数据进行爬取
    #分析:
        #新闻数据是通过ajax动态加载出来的
        #捕获到ajax数据包中的url
        
        
    session = requests.Session()
    #第一次请求发送:为了捕获cookie且存储到session对象中
    first_url = 'https://xueqiu.com/'
    session.get(first_url,headers=headers)
    
    #第二次请求发送:携带者cookie进行的请求发送
    url = 'https://xueqiu.com/v4/statuses/public_timeline_by_category.json?since_id=-1&max_id=20358211&count=15&category=-1'
    json_data = session.get(url=url,headers=headers).json()
    json_data
    
  • 相关阅读:
    一步一步学习sharepoint2010 workflow 系列第二部分:sharepoint无代码工作流 第3章 自定义工作流(Custom Designer workflows)
    巧用BroadcastReceiver实现开机“自”启动
    webview 与 javascript
    android webview设置内容的字体大小
    android中使用BitmapFactory的decodeStream()方法解码图片失败问题
    在ListView的item项里使用CheckBox或者Button时,OnItemClickListener无响应的问题
    修改Android中strings.xml文件, 动态改变数据
    在使用google map 时出现Android关于java.lang.NoClassDefFoundError问题
    android中String.xml可以传参数的资源
    android 代码实现应用强制装到手机内存
  • 原文地址:https://www.cnblogs.com/zhangdadayou/p/11999887.html
Copyright © 2020-2023  润新知