您的位置: 首页 > 新闻资讯 > > 正文

如何随机切换IP和UA?

发布时间:2020年01月04日 来源:互联网

    在爬虫爬取过程中,网站会根据我们的IP和UA去确认到底是浏览器操作还是爬虫在操作,所以,为了让爬虫不被网站禁止,随机切换Ip 和UA是很重要的,因为这个类在各个爬虫中经常要用到,所以可以自已维护一份随机切换IP和UA的代码,


    可以在爬虫工程目录中加入tools这个目录,这个目录中存放着这个爬虫所用到的一些工具,


    目录结构如下:

如何随机切换IP和UA?

    get_ip.py 代码如下:


    复制代码


    import requests


    import pymysql


    class GetIp(object):


    """从数据库中取出可用的IP给爬虫使用"""


    conn = pymysql.connect(host="127.0.0.1", user="root", password="root", db="outback")


    cursor = conn.cursor()


    def get_random_ip(self):


    select_sql = "select ip,port,type from ip_proxy ORDER  by rand() limit 1"


    result = self.cursor.execute(select_sql)


    for ip_info in self.cursor.fetchall():


    ip = ip_info[0]


    port = ip_info[1]


    type = ip_info[2].lower()


    judge_result = self.judge_ip(type, ip, port, )


    if judge_result:


    # 这里不能关闭连接,因为每一个请求都会云获取一个IP,如果关了,就只能获取一个


    # self.cursor.close()


    # self.conn.close()


    return "{0}://{1}:{2}".format(type, ip, port)


    else:


    self.get_random_ip()


    def judge_ip(self, type, ip, port):


    """验证IP是否可用,如果可以用,则返回,不可用,则删除数据库中的该IP"""


    baidu = "https://www.baidu.com"


    proxy_url = "{0}://{1}:{2}".format(type, ip, port)


    try:


    proxy_dict = {type:proxy_url,}


    response = requests.get(baidu, proxies=proxy_dict)


    except Exception as e:


    print("invalid in or port ")


    self.delete_ip(ip)


    return False


    else:


    code = response.status_code


    if code >= 200 and code < 300:


    print("effective ip,the ip is",proxy_url)


    return True


    else:


    print("invalid iP ")


    self.delete_ip(ip)


    return False


    def delete_ip(self, ip):


    delete_sql = """delete FROM ip_proxy where ip='{0}'""".format(ip)


    try:


    self.cursor.execute(delete_sql)


    self.conn.commit()


    except Exception as e:


    print(e)


    if __name__ == "__main__":


    get_ip = GetIp()


    ip = get_ip.get_random_ip()


    print(ip)


    复制代码


    之后在middlewares.py 中进行设置,


    middlewares.py代码如下:


    复制代码


    from taobao.tools.get_ip import GetIp


    class RandomProxyMiddleware(object):


    #动态设置ip代理


    def process_request(self, request, spider):


    get_ip = GetIP()


    request.meta["proxy"] = get_ip.get_random_ip()


    复制代码


    这样就可以使scrapy 动态的随机更换IP


    二 随机更换UA,


    自己可以在settings中维护一个ua池,然后随机切换,但是这样有个不好的地方是,自已维护UA池很麻烦,还在定期查看这些UA是否可用,网上有个开源的库 fake-useragent


    这个库动态的管理着很多UA,可以使用。


    用法如下:


    复制代码


    from scrapy import signals


    from fake_useragent import UserAgent


    class RandomUserAgentMiddleware(object):


    """使用爬虫使用随机的Ip 和 UA"""


    def __init__(self, crawler):


    self.ua = UserAgent()


    self.ua_type = crawler.settings.get("USER_AGENT_TYPE", "random")


    super(RandomIpAndUserAgentMiddleware, self).__init__()


    @classmethod


    def from_crawler(cls, crawler):


    return cls(crawler)


    def process_request(self, request, spider):


    def get_ua():


    return getattr(self.ua, self.ua_type)


    request.headers.setdefault('User-Agent', get_ua())


    复制代码


    其实上边两个类可写成一个类,这个在settings中只设置一个类就行了,代码如下:


    复制代码


    from scrapy import signals


    from fake_useragent import UserAgent


    from taobao.tools.get_ip import GetIp


    def process_request(self, request, spider):


    def get_ua():


    return getattr(self.ua, self.ua_type)


    request.headers.setdefault('User-Agent', get_ua())


    get_ip = GetIP()


    request.meta["proxy"] = get_ip.get_random_ip()


    复制代码


    上面代码中有几个非常重要的,也是很容易出错的地了,


    一、老师,前辈们经常会说,文件打开记得关闭,数据库连接后记得断开连接,但是在GetIp这个类中不能断开数据库(我在这里也卡了),因为scrapy是随机取IP,也就意味着scrapy对每次请求(也可能是每几次请求)就会去数据库中取IP,所以如果在GetIp这个类中就断开连接后,也就是只能取一次,下次就不能取了,所以GetIp这个类中不能断开连接,可以使用scrapy 信号,当爬虫关闭的时候断开连接。所以GetIp类不连接数据而没有断开连接是没有错的。


相关文章内容简介

1 免费代理IP能用于爬虫吗

    免费代理IP能用于爬虫吗?免费代理IP就是不需要花钱,在网络上可以直接提取,然后用来替换IP。并不是所有项目都能用免费代理IP的,例如爬虫就不可以。    免费代理IP的来源比较杂,很多没有用,使用时间短,匿名程度也参差不齐,其中有一些是高度匿名的,但数量有限,也很难挑选。而爬虫工作需要的IP,要求比较高,因为爬虫IP一旦质量不高就会被对方网站发现,被禁止抓取数据,无法完成工作。所以,免费代理IP是不适合爬虫的。但如果免费代理IP的匿名程度够的话,使用效率低,也是符合使用需求的。    爬虫大家都知道,是采集数据的方式。通过采集来的数据分析,可以获取有价值的信息。而代理IP是换IP最方便的工具,爬虫工作是要用代理IP的。    爬虫对被爬的网站来说是毫无利益的,反而会影响到服务器的工作,所以现在都设有反爬程序,IP限制是最基本的。爬虫工作的时候,如果速度快,用同一个IP会有访问的问题,这时网络就会有验证或者直接封锁IP,给爬虫工作带来了很大的困难。 ... [阅读全文]

2 发帖用代理IP有什么好处?

    发帖用代理IP有什么好处?发帖是网络营销的主要途径,在发帖的时候,很多时候都要用到代理IP,这并不奇怪,代理IP给网络营销人员带来了很大的便利。那么,发帖用代理IP有什么好处?    贴吧大家都不陌生,很多人在贴吧交流,一般同一个IP只能发布有限的帖子,评论也是有限制的。如果想大量发帖,就需要用代理IP来解决了。有很多热帖有的是真实评论,有的可能需要代理IP来帮忙,用代理IP去访问网站,用户不会被网站监视限制,或者被封锁了。    随着网络的发展,网络营销是很多公司必须要做的,其中网络影响最重要的途径就是发帖。很多发帖的工作人员都在使用代理IP,但还有很多人并不了解。那么,营销发帖一定要用代理IP吗?    例如贴吧、微博等平台,这些平台发帖可以与其他网友进行交流,起到宣传的作用。但一个IP发帖的数量是有限的,如果想大量发帖,就需要代理IP的帮助。更换IP后,就可以伪装成一个全新的用户,自然不会被平台限制。还有网络营销最常见的问答方式,也需要更换IP后进行自问... [阅读全文]

推荐阅读

  1. 12

    2020-05

    代理IP如何帮助电商行业?

    随着时代进入互联网的时代,网络购物成为更多人选择的购物方式,这催生了一批网络商家:电商。而随着电商数量快速增长,竞争也越来越激烈,这就导致商家开始以各种手段推销自己的商品

  2. 10

    2020-03

    代理IP的质量怎么辨别是否为佳?

    互联网大数据的快速发展,对代理IP的需求也日益剧增,各种代理IP服务商也是如雨后春笋般的冒出来,通过搜索引擎一搜,可以搜到很多的代理IP服务商,那么我们怎么判断代理IP的质量呢,如

  3. 22

    2020-09

    为何网站会对爬虫抓取有一定的限制?

    为何网站会对爬虫抓取有一定的限定呢?最先我们要了解这类抓取会产生哪些危害。针对网站服务平台方而言,采集抓取会导致网络服务器工作压力过大,对一切正常客户的浏览造成影响。并且

  4. 09

    2020-03

    免费的代理商IP都无须关联权限受权吗?

    很多盆友在应用 http代理 商的时段发觉要求关联 IP 权限,认为很是费劲,常常有盆友跟万变 IP代理 说,看看这个、哪家都无须关联权限的,取得IP就能立即应用,多便捷啊,大家就不可以学一

  5. 10

    2020-09

    影响代理IP的稳定性由什么决定?

    网络工作者都希望自己的工作任务可以稳定的进行,那么对于代理IP的稳定性就有一定的要求了。有时候我们选购了稳定的代理IP,但也不一定可以稳定的进行工作,这是什么原因呢,我们一起

  6. 07

    2020-07

    高匿IP代理是什么

    代理IP根据匿名程度可以分为三种,分别是透明IP,普通匿名IP,高级匿名IP。其中高级匿名代理IP因为其高度的安全性受到广大网络工作者的喜爱,下面就对高匿代理IP做一个简要的介绍。

因为专业! 所以简单! 产品至上,价格实惠 是我们服务追求的宗旨

免费试用