关于python:认识爬虫怎么使用代理-IP-规避反爬虫以及使用爬虫获取更多可用的免费代理-IP

41次阅读

共计 2393 个字符,预计需要花费 6 分钟才能阅读完成。

在一些网站服务中,除了对 user-agent 的身份信息进行检测、也对客户端的 ip 地址做了限度,如果是同一个客户端拜访此网站服务器的次数过多就会将其辨认为爬虫,因此,限度其客户端 ip 的拜访。这样的限度给咱们的爬虫带来了麻烦,所以应用代理 ip 在爬虫中是十分有必要的。

要应用代理 ip 进行爬虫就面临两个问题,一是怎么应用、这个就绝对简略,另一个是怎么获取这么多的代理 ip。获取代理 ip 能够去代理 ip 的站点购买、也有收费的代理 ip 站点,相对来说买的代理 ip 的品质更高一些,最初,咱们能够应用爬虫技术来爬取一些可用的代理 ip 也就是上面次要说的内容。

1、怎么应用代理 ip 进行爬虫

和之前应用申请的模式一样,应用代理 ip 时在申请办法下面退出 proxies 的参数设置为 {“http”:” 代理 ip”} 的字典参数值即可应用代理 ip 对服务器发动申请。

1response = requests.get(url=url, headers=headers, 
2                        params=params,proxies={"http":"117.136.27.43"})

2、怎么在其余站点上爬取可用的代理 ip

爬取代理 ip 的思路绝对也比较简单,首先应用网页下载器下载相应的网页、而后提取网页中的所有的代理 ip,最初一步就是验证爬取的代理 ip 是否是可用,将验证通过的代理 ip 进行保留以供后续爬虫应用。

  • 应用网页下载器下载网页
 1# -*- coding: UTF-8 -*-
 2
 3# 导入 requests 扩大库
 4import requests
 5# 导入解析库
 6from bs4 import BeautifulSoup
 7
 8# 初始化 url 地址 (这里只获取首页展现的 ip)
 9url = 'http://www.66ip.cn'
10# 网页内容 current
11current = ''
12
13try:
14    headers = {15        'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0'
16    }
17    response = requests.get(url=url, timeout=5, headers=headers)
18    current = response.text
19
20except Exception:
21    print('网页下载失败 ···')
  • 解析网页并提取代理 ip
 1# 导入 re 模块
 2import re
 3
 4# 创立正则表达式匹配 ip 地址
 5regx_ip = re.compile(r'^((2(5[0-5]|[0-4]d))|[0-1]?d{1,2})(.((2(5[0-5]|[0-4]d))|[0-1]?d{1,2})){3}')
 6# 创立正则表达式匹配 port 地址
 7regx_port = re.compile(r'^([0-9]|[1-9]d{1,3}|[1-5]d{4}|6[0-5]{2}[0-3][0-5])$')
 8
 9# 定义初始化 list 寄存解析后的 ip
10ip_array = []
11
12# 创立解析对象
13beau_soup = BeautifulSoup(current, 'html.parser')
14# 获取所有的 td 标签
15trs = beau_soup.find_all('tr')
16
17# 遍历提取 ip 和端口
18for tr in trs:
19    tds = tr.find_all('td')
20    ip_port = ''
21    for td in tds:
22        if regx_ip.match(td.text):
23            ip_port = ip_port + 'http://' + td.text
24        if regx_port.match(td.text):
25            ip_port = ip_port + ':' + td.text
26    if ip_port != '':
27        ip_array.append(ip_port)
28
29# 爬取到的代理 ip
30print ip_array
31
32# 分装 ip 和端口应用字典的模式保留
33ip_dict_list = []
34for ip in ip_array:
35    ip_dict = {'http':ip}
36    ip_dict_list.append(ip_dict)
37
38print ip_dict_list
  • 验证获取的代理 ip 是否可用
 1# 导入 random 扩大库、生成随机数
 2import random
 3# 验证代理 ip
 4# 随机获取代理 ip
 5proxy = ip_dict_list[random.randint(0,len(ip_dict_list) - 1)]
 6# 初始化验证胜利的 ip 数组
 7ip_sucess_array = []
 8try:
 9    print '以后代理:',proxy
10    requests.get(url='http://www.baidu.com',headers=headers,timeout=3,proxies=proxy)
11    print '验证胜利'
12    ip_sucess_array.append(proxy)
13except Exception,e:
14    print '验证失败'

更多精彩返回微信公众号【Python 集中营】,专一于 python 技术栈,材料获取、交换社区、干货分享,期待你的退出~

正文完
 0