python爬虫之反爬虫(随机user-agent,获取代理ip,检测代理ip可用性)

python爬虫之反爬虫(随机user-agent,获取代理ip,检测代理ip可用性)

目录

随机User-Agent

获取代理ip

检测代理ip可用性

  

随机User-Agent

fake_useragent库,伪装请求头

from fake_useragent import UserAgent

ua = UserAgent()
# ie浏览器的user agent
print(ua.ie)

# opera浏览器
print(ua.opera)

# chrome浏览器
print(ua.chrome)

# firefox浏览器
print(ua.firefox)

# safri浏览器
print(ua.safari)

# 最常用的方式
# 写爬虫最实用的是可以随意变换headers,一定要有随机性。支持随机生成请求头
print(ua.random)
print(ua.random)
print(ua.random)

获取代理ip

在免费的代理网站爬取代理ip,免费代理的采集也很简单,无非就是:访问页面页面 —> 正则/xpath提取 —> 保存

代理ip网站
有代理:https://www.youdaili.net/Daili/guonei/
66代理:http://www.66ip.cn/6.html
西刺代理:https://www.xicidaili.com/
快代理:https://www.kuaidaili.com/free/
#根据网页结果,适用正则表达式匹配
#这种方法适合翻页的网页
import re
import requests
import  time

def get_ip():
    url=‘https://www.kuaidaili.com/free/inha/‘
    url_list=[url+str(i+1) for i in range(5)] #生成url列表,5代表只爬取5页
    print(url_list)
    ip_list = []
    for i in range(len(url_list)):
        url =url_list[i]
        html = requests.get(url=url,).text
        regip = ‘<td.*?>(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})</td>.*?<td.*?>(\d{1,5})</td>‘
        matcher = re.compile(regip,re.S)
        ipstr = re.findall(matcher, html)
        time.sleep(1)

        for j in ipstr:
            ip_list.append(j[0]+‘:‘+j[1])  #ip+port
    print(ip_list)
    print(‘共收集到%d个代理ip‘ % len(ip_list))
    return ip_list
if __name__==‘__main__‘:
    get_ip()

  

#先获取特定标签
#解析
import requests
from bs4 import BeautifulSoup
def get_ip_list(obj):
    ip_text = obj.findAll(‘tr‘, {‘class‘: ‘odd‘})   # 获取带有IP地址的表格的所有行
    ip_list = []
    for i in range(len(ip_text)):
        ip_tag = ip_text[i].findAll(‘td‘)
        ip_port = ip_tag[1].get_text() + ‘:‘ + ip_tag[2].get_text() # 提取出IP地址和端口号
        ip_list.append(ip_port)
    print("共收集到了{}个代理IP".format(len(ip_list)))
    print(ip_list)
    return ip_list
url = ‘http://www.xicidaili.com/‘
headers = {
    ‘User-Agent‘: ‘User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36‘}
request = requests.get(url, headers=headers)
response =request.text
bsObj = BeautifulSoup(response, ‘lxml‘)     # 解析获取到的html
lists=get_ip_list(bsObj)

检测代理ip可用性

第一种方法:通过返回的状态码判断

import requests
import random
import re
import time

def get_ip():
    url=‘https://www.kuaidaili.com/free/inha/‘
    url_list=[url+str(i+1) for i in range(1)]
    print(url_list)
    ip_list = []
    for i in range(len(url_list)):
        url =url_list[i]
        html = requests.get(url=url,).text
        regip = ‘<td.*?>(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})</td>.*?<td.*?>(\d{1,5})</td>‘
        matcher = re.compile(regip,re.S)
        ipstr = re.findall(matcher, html)
        time.sleep(1)

        for j in ipstr:
            ip_list.append(j[0]+‘:‘+j[1])
    print(‘共收集到%d个代理ip‘ % len(ip_list))
    print(ip_list)
    return ip_list
def valVer(proxys):
    badNum = 0
    goodNum = 0
    good=[]
    for proxy in proxys:
        try:
            proxy_host = proxy
            protocol = ‘https‘ if ‘https‘ in proxy_host else ‘http‘
            proxies = {protocol: proxy_host}
            print(‘现在正在测试的IP:‘,proxies)
            response = requests.get(‘http://www.baidu.com‘, proxies=proxies, timeout=2)
            if response.status_code != 200:
                badNum += 1
                print (proxy_host, ‘bad proxy‘)
            else:
                goodNum += 1
                good.append(proxies)
                print (proxy_host, ‘success proxy‘)
        except Exception as e:
            print( e)
            # print proxy_host, ‘bad proxy‘
            badNum += 1
            continue
    print (‘success proxy num : ‘, goodNum)
    print( ‘bad proxy num : ‘, badNum)
    print(good)

if __name__ == ‘__main__‘:
    ip_list=get_ip()
    valVer(ip_list)

  

第二种方法:使用requests包来进行验证

import requests
import random
import re
import time

def get_ip():
    url=‘https://www.kuaidaili.com/free/inha/‘
    url_list=[url+str(i+1) for i in range(1)]
    print(url_list)
    ip_list = []
    for i in range(len(url_list)):
        url =url_list[i]
        html = requests.get(url=url,).text
        regip = ‘<td.*?>(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})</td>.*?<td.*?>(\d{1,5})</td>‘
        matcher = re.compile(regip,re.S)
        ipstr = re.findall(matcher, html)
        time.sleep(1)

        for j in ipstr:
            ip_list.append(j[0]+‘:‘+j[1])
    print(ip_list)
    print(‘共收集到%d个代理ip‘ % len(ip_list))
    return ip_list
def valVer(proxys):
    badNum = 0
    goodNum = 0
    good=[]
    for proxy in proxys:
        print("现在正在检测ip",proxy)
        try:
            requests.get(‘http://wenshu.court.gov.cn/‘, proxies={"http":"http://"+str(proxy)}, timeout=2)
        except:
            badNum+=1
            print(‘connect failed‘)
        else:
            goodNum=1
            good.append(proxy)
            print(‘success‘)

    print (‘success proxy num : ‘, goodNum)
    print( ‘bad proxy num : ‘, badNum)
    print(good)

if __name__ == ‘__main__‘:
    ip_list=get_ip()
    valVer(ip_list)

第三种方法:使用telnet

import telnetlib

try:

    telnetlib.Telnet(‘127.0.0.1‘, port=‘80‘, timeout=20)

except:

    print ‘connect failed‘

else:

    print ‘success‘

  

原文地址:https://www.cnblogs.com/-wenli/p/10211942.html

时间: 2024-08-07 20:33:23

python爬虫之反爬虫(随机user-agent,获取代理ip,检测代理ip可用性)的相关文章

Python爬虫与反爬虫(7)

[Python基础知识]Python爬虫与反爬虫(7) 很久没有补爬虫了,相信在白蚁二周年庆的活动大厅比赛中遇到了关于反爬虫的问题吧 这节我会做个基本分享. 从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分. 一般网站从三个方面反爬虫:用户请求的Headers,用户行为,网站目录和数据加载方式.前两种比较容易遇到,大多数网站都从这些角度来反爬虫.第三种一些应用ajax的网站会采用,这样增大了爬取的难度. user-agent 最简单的反爬虫机制,应该算是U-A校验了.浏览器在发送请求的时候

【Python】爬虫与反爬虫大战

爬虫与发爬虫的厮杀,一方为了拿到数据,一方为了防止爬虫拿到数据,谁是最后的赢家? 重新理解爬虫中的一些概念 爬虫:自动获取网站数据的程序反爬虫:使用技术手段防止爬虫程序爬取数据误伤:反爬虫技术将普通用户识别为爬虫,这种情况多出现在封ip中,例如学校网络.小区网络再或者网络网络都是共享一个公共ip,这个时候如果是封ip就会导致很多正常访问的用户也无法获取到数据.所以相对来说封ip的策略不是特别好,通常都是禁止某ip一段时间访问.成本:反爬虫也是需要人力和机器成本拦截:成功拦截爬虫,一般拦截率越高,

爬虫与反爬虫

转自:https://mp.weixin.qq.com/s/-w-yC6PCdTOpfKS8HZEleA 前言 爬虫与反爬虫,是一个很不阳光的行业. 这里说的不阳光,有两个含义. 第一是,这个行业是隐藏在地下的,一般很少被曝光出来.很多公司对外都不会宣称自己有爬虫团队,甚至隐瞒自己有反爬虫团队的事实.这可能是出于公司战略角度来看的,与技术无关. 第二是,这个行业并不是一个很积极向上的行业.很多人在这个行业摸爬滚打了多年,积攒了大量的经验,但是悲哀的发现,这些经验很难兑换成闪光的简历.面试的时候,

关于爬虫与反爬虫简略方案

像安全与黑客从来都是相辅相成一样. 爬虫与反爬虫也是在双方程序员的斗智斗勇的过程不断发展和成长的. 抓包 抓包的目的: 分析出协议请求使用的数据,请求接口,参数等等. 常用的抓包分析工具: Fiddler Charles Sniffer Wireshark 具体使用策略,请自行百度,Google. 抓数据 这是我使用代理ip请求登录接口时,某APP的响应: 使用 HttpClient 模拟请求 充分了解 HttpClient 的特性,使用方式等. HttpClient4.5官方教程 user_a

2015第42周一爬虫与反爬虫

一般爬虫要考虑的问题 之前尝试了request和cheerio实现的简单抓取数据用例,真的很初级,真正的爬虫且不说Google.百度等商用爬虫,即便是一个开源爬虫也要考虑很多东西,比如nodejs的开源爬虫neocrawler: 抓取网页并进行结构化解析,提取关键字后索引入库,防止网页重复抓取: 抓取利用JS产生内容的网页: 重试容错机制,失败后详细记录: 预设cookie,解决登陆后才能抓取内容问题: 限制并发数和集成代理IP功能,避免被原网站屏蔽: 分布式抓取提升效率. 网站反爬虫常用方法

Python3爬虫(十一) 爬虫与反爬虫

Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.重要概念 二.爬虫反爬虫进化论 原文地址:https://www.cnblogs.com/Infi-chu/p/8981537.html

简析爬虫、反爬虫、反反爬虫之间的抗衡

爬虫的类型分为:通用型爬虫.聚焦型爬虫. 通用型爬虫指的是搜索引擎, 聚焦型爬虫指的是针对哪家网站做针对性的爬取. 接下来分析一下其各自的手段和方法. 反爬手段:IP频率限制,在一定时间内对服务器发起较高频率的网络请求的IP. 用户信息,需要用户名密码及验证码的验证, ajax异步请求,页面无刷新 投毒型,要a给b 诱捕型,多层级存储文件 爬虫:IP代理,IP池,降低频率,模拟用户信息,模拟浏览器, 由爬虫引出的反爬虫.反反爬虫之间不仅是各大公司财力的抗衡,也是优秀的爬虫工程师之间技术的较量,

爬虫与反爬虫的较量-图片反爬

前言 在去年6月吧,刚转行做爬虫的时候,经常拿图片网还有小说网练手,无意中发现一个壁纸网站叫做娟娟壁纸网,有好多高清壁纸(这不是广告,哈哈) 当时是写了全站爬取的代码.以为自己大工告成的时候,结果刚运行,就发现爬出来的图片不对. 每张图片都是这样,我以为遇到了IP限制,于是使用代理,结果仍然是失败. 难道是请求头做了限制?好,那我全部带上.结果依旧失败. 当时也是忙于找工作,也没静下心来仔细想,今天回过头来继续盘它. 虽然最后巧妙的用了get请求爬取成功,但是还是没搞明白原图反爬的原因. 下面来

反击“猫眼电影”网站的反爬虫策略

0×01 前言 前两天在百家号上看到一篇名为<反击爬虫,前端工程师的脑洞可以有多大?>的文章,文章从多方面结合实际情况列举了包括猫眼电影.美团.去哪儿等大型电商网站的反爬虫机制.的确,如文章所说,对于一张网页,我们往往希望它是结构良好,内容清晰的,这样搜索引擎才能准确地认知它:而反过来,又有一些情景,我们不希望内容能被轻易获取,比方说电商网站的交易额,高等学校网站的题目等.因为这些内容,往往是一个产品的生命线,必须做到有效地保护.这就是爬虫与反爬虫这一话题的由来.本文就以做的较好的"