用户代理与IP代理爬取糗事百科

用户代理与IP代理爬取糗事百科

  • 本文通过用户代理池和IP代理池的联和使用来爬取网页

一、情况分析

  • 绝大多数的网站都具备反爬功能。而我们要爬取数据必须绕过这关。

  • 如果短时期内频繁的爬取网站数据,极易被发现。人对网站的正常访问速度是有限的,因此爬虫就变得更容易暴露。

  • 上网的用户会被分配给一个唯一的IP地址。因此通过对这个IP的监控,也极容易发现是爬虫在爬取网页。

二、解决思路

  • 既然网站拒绝爬虫的标识,我们可以让爬虫伪装成不同的浏览器。浏览器种类越多越好。

  • 既然IP地址是唯一的,我们可以想办法每次用不同的IP代理地址爬取。这样,对方就不太容易能够发现爬虫的行为。

三、实现代码

import urllib.request
import re
import urllib.error
import random

#构建IP代理池,IP可以到免费网站或者付费网站获取代理IP
ippools = [
    "42.123.77.119",
    "116.226.90.12",
    "139.224.237.33",
    "58.209.151.126"
    ]
#构建用户代理池
uapools = [
    "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Maxthon/3.0)",
    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ;  QIHU 360EE)",
    ]

def ip_ua(ippools,uapools):
    headers = ("User-Agent",random.choice(uapools))
    thisip = random.choice(ippools)
    print("当前使用IP:"+str(thisip))
    #添加IP代理
    proxy = urllib.request.ProxyHandler({"http":thisip})
    opener = urllib.request.build_opener(proxy,urllib.request.ProxyHandler)
    #添加头文件
    opener.addheaders = [headers]
    #安装为全局
    urllib.request.install_opener(opener)

try:
    for i in range(0,4):
        try:
            ip_ua(ippools,uapools)
            url = "http://www.qiushibaike.com/8hr/page/"+str(i)+"/?s=4985364"
            data = urllib.request.urlopen(url).read().decode('utf-8')
            pat = '<div class="content">\s*?<span>(.*?)</span>'
            rst = re.compile(pat).findall(data)
            for j in range(0,len(rst)):
                print(rst[j])
                print("........")
        except urllib.request.HTTPError as err:
            if hasattr(err, 'code'):
                print(err.code)
            if hasattr(err, 'reason'):
                print(err.reason)
except Exception as err:
    print("出现异常:"+str(err))

四、注意事项

由于IP的变动性,通常其使用寿命不长。如果需要持久的使用,需要选择优质的代理IP。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值