• 06-代理爬虫实战


    爬虫代理概述

    • 在爬虫中,所谓的代理指的就是代理服务器
    • 代理服务器的作用就是用来转发请求和响应
    • 如果我们的爬虫在短时间内对服务器发起高频的请求,那么服务器会检测到这样的一个异常行为请求,就会将该请求对应设备的ip进行封禁,设备就无法对服务器再次进行请求发送了
    • 使用代理服务器进行信息爬取,可以很好的解决IP限制的问题
      一般模式: 客户端 ----> 服务器端
      代理模式: 客户端----> 代理 -----> 服务器端
    • 我们浏览信息的时候,先向代理服务器发出请求,然后又代理服务向互联网获取信息,再返回给我们
    • 代理服务器分为不同的匿名度
      • 透明代理:如果使用了该形式的代理,服务器端知道你使用了代理机制也知道你真是ip
      • 匿名代理:知道你使用代理,但是不知道你的真实ip
      • 高匿代理:不知道你使用代理,也不知道你真实ip
    • 代理的类型:
      • https: 代理只能转发https协议的请求
      • http:转发http的请求
    • 购买代理服务器:
      • 快代理
      • 西祠代理
      • goubanjia
      • 代理精灵(推荐):http://http.zhiliandaili.cn
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
    # -*- coding: utf-8 -*-
    import requests
    from lxml import etree
    import random
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
    
    } #模仿浏览器UA头
    
    # 封装代理池提取代理api链接里面的代理ip端口
    url = "http://t.ipjldl.com/index.php/api/entry?method=proxyServer.generate_api_url&packid=1&fa=0&fetch_key=&groupid=0&qty=5&time=1&pro=&city=&port=1&format=html&ss=5&css=&dt=1&specialTxt=3&specialJson=&usertype=15"
    page_text =requests.get(url,headers=headers).text
    tree =etree.HTML(page_text)
    proxy_list = tree.xpath('//body//text()')
    http_proxy = []#代理池
    for proxy in proxy_list:
        dic = {
            "https":proxy
        } #封装成一个  http/https : 代理ip 的字典
        http_proxy.append(dic) #把结果追加到16行定义的代理池列表中
    print(http_proxy)
    

    在这里插入图片描述
    在这里插入图片描述

    # -*- coding: utf-8 -*-
    import requests
    from lxml import etree
    import random
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
    
    } #模仿浏览器UA头
    
    # 封装代理池提取代理api链接里面的代理ip端口
    url = "http://ip.ipjldl.com/index.php/api/entry?method=proxyServer.generate_api_url&packid=1&fa=0&fetch_key=&groupid=0&qty=10&time=1&pro=&city=&port=1&format=html&ss=5&css=&dt=1&specialTxt=3&specialJson=&usertype=15"
    page_text =requests.get(url,headers=headers).text
    tree =etree.HTML(page_text)
    proxy_list = tree.xpath('//body//text()')
    http_proxy = []#代理池
    for proxy in proxy_list:
        dic = {
            "https":proxy
        } #封装成一个  http/https : 代理ip 的字典
        http_proxy.append(dic) #把结果追加到16行定义的代理池列表中
    print(http_proxy)
    url2 = "https://weixin.sogou.com/weixin?query=风景&page=%d"+"&ie=utf8" ##定义通用翻页url
    for pg in range(1,100):
        new_url = format(url2%pg) ##定义通用翻页url
        print(new_url)
        html2 = requests.get(url=new_url,headers=headers,proxies=random.choice(http_proxy)).text
        tree2 = etree.HTML(html2)
        title = tree2.xpath("//div[@class='txt-box']/h3/a//text()")
        print(title)
        nr = tree2.xpath("//div[@class='txt-box']/p//text()")
        print(nr)
    

    在这里插入图片描述

    使用代理爬取搜狗商品
    在这里插入图片描述

    # -*- coding: utf-8 -*-
    import requests
    from lxml import etree
    import random
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
    
    } #模仿浏览器UA头
    #封装代理池提取代理api链接里面的代理ip端口
    url = "http://t.ipjldl.com/index.php/api/entry?method=proxyServer.generate_api_url&packid=1&fa=0&fetch_key=&groupid=0&qty=200&time=1&pro=&city=&port=1&format=html&ss=5&css=&dt=1&specialTxt=3&specialJson=&usertype=15"
    page_text =requests.get(url,headers=headers).text
    tree =etree.HTML(page_text)
    proxy_list = tree.xpath('//body//text()')
    http_proxy = []#代理池
    for proxy in proxy_list:
        dic = {
            "https":proxy
        } #封装成一个  http/https : 代理ip 的字典
        http_proxy.append(dic) #把结果追加到定义的代理池列表中
    print(http_proxy)
    
    url2 = "https://gouwu.sogou.com/shop?ie=utf8&query=2020&p=40251501&sourceid=sr_bpage&page=%d" ##定义通用翻页url
    for pg in range(1,100):
        new_url = format(url2%pg) ##定义通用翻页url
        print(new_url)
        html2 = requests.get(url=new_url,headers=headers,proxies=random.choice(http_proxy)).text#携带代理池
        tree2 = etree.HTML(html2)
        title = tree2.xpath('//h4/a//text()')
        for title1 in title:
            print(title1)
    
    

    在这里插入图片描述

  • 相关阅读:
    Spring学习笔记(8)——依赖注入
    JS中Ajax的实现部分
    Hibernate4之注解零配置
    SQL中的DDL、DML、DCL、TCL
    冷启动与热启动
    双击退出
    显示或者隐式
    Android笔记01--手机振动
    github与pycharm
    正则re模块--入门
  • 原文地址:https://www.cnblogs.com/gemoumou/p/13635339.html
Copyright © 2020-2023  润新知