爬取快代理的免费IP并测试
各大免费IP的网站的反爬手段往往是封掉在一定时间内访问过于频繁的IP,因此在爬取的时候需要设定一定的时间间隔,不过说实话,免费代理很多时候基本都不能用,可能一千个下来只有十几个可以用,而且几分钟之后估计也扑街了。虽然有那种付费的大量代理IP,但是也不见得好,测试过,里面优质的也很少。目前体验比较好的还是私密代理,当然还有其他。贵有贵的道理。
import requests
import time
import random
from fake_useragent import UserAgentfrom requests.exceptions import RequestException
from lxml import etree
import csv class IPSpider(object):
def __init__(self):
self.url = 'https://www.kuaidaili.com/free/inha/'
self.url_test = 'http://www.baidu.com/' # 直接拿百度来测试IP能不能用 def get_headers(self):
"""
随机产生请求头
:return:
"""
ua = UserAgent()
headers = {
'User-Agent': ua.random
}
return headers def get_page(self, url):
"""
获取网页源代码
:param url:
:return:
"""
while True:
try:
headers = self.get_headers()
response = requests.get(url, headers=headers, verify=False)
if response.status_code == 200:
return response.text
print(response.status_code)
raise ValueError("打开网页错误")
except RequestException as err:
print(err) def parse_ip(self, text):
"""
提取页面的IP和端口号
:param text:
:return:
"""
html = etree.HTML(text)
ip = html.xpath("//tr/td[1]/text()")
print(ip)
port = html.xpath("//tr/td[2]/text()")
print(port)
return zip(ip, port) def test_ip(self, ip, port):
"""
测试IP是否可用
:param ip:
:param port:
:return:
"""
try:
# url_ip = 'http://' + ip + ':' + port
# proxies = {
# 'http': url_ip,
# 'https': url_ip
# }
proxies = {
'http': 'http://{}:{}'.format(ip, port),
'https': 'https://{}:{}'.format(ip, port),
}
headers = self.get_headers()
response = requests.get(url=self.url_test, headers=headers, proxies=proxies, timeout=8)
if response.status_code == 200:
print("%s可用" % ip)
return ip, port
return None
except RequestException:
print('%s失效' % ip) def save_ip(self, result):
"""
可用的IP保存
:param result:
:return:
"""
with open("kuaidailiip.csv", "a")as f:
writer = csv.writer(f)
writer.writerows(result) def run(self):
"""
主函数
:return:
"""
for i in range(1, 1001):
url = self.url + str(i) + '/'
text = self.get_page(url)
ip = self.parse_ip(text)
result = []
for j in ip:
ok_ip = self.test_ip(j[0], j[1])
if ok_ip == None:
continue
else:
result.append(ok_ip)
self.save_ip(result)
time.sleep(random.randint(5, 7))
if __name__ == '__main__':
spider = IPSpider()
spider.run()
爬取快代理的免费IP并测试的更多相关文章
- 爬取软考试题系列之ip自动代理
马上5月份有个软件专业等级考试,以下简称软考,为了更好的复习备考,我打算抓取www.rkpass.com网上的软考试题. 以上为背景. 很久没有更新博客园的博客了,所以之前的代码没有及时的贴出来,咱们 ...
- Python 爬虫练习(一) 爬取国内代理ip
简单的正则表达式练习,爬取代理 ip. 仅爬取前三页,用正则匹配过滤出 ip 地址和 端口,分别作为key.value 存入 validip 字典. 如果要确定代理 ip 是否真的可用,还需要再对代理 ...
- 爬取掌阅app免费电子书数据
主要介绍如何抓取app数据及抓包工具的使用,能看到这相信你已经有爬虫基础了 编不下去了,主要是我懒,直接开干吧! 一.使用环境和工具 windows + python3 + Jsonpath + Ch ...
- Selenium&PhantomJS 完成爬取网络代理
Selenium模块是一套完整的Web应用程序测试系统,它包含了测试的录制(SeleniumIDE).编写及运行(Selenium Remote Control)和测试的并行处理(Selenimu G ...
- python requests库爬取网页小实例:ip地址查询
ip地址查询的全代码: 智力使用ip183网站进行ip地址归属地的查询,我们在查询的过程是通过构造url进行查询的,将要查询的ip地址以参数的形式添加在ip183url后面即可. #ip地址查询的全代 ...
- 某代理网站免费IP地址抓取测试
源代码在测试中... http://www.AAA.com/nn/| 122.6.107.107| 8888| 山东日照| 高匿| HTTP| | | ...
- 爬取西刺ip代理池
好久没更新博客啦~,今天来更新一篇利用爬虫爬取西刺的代理池的小代码 先说下需求,我们都是用python写一段小代码去爬取自己所需要的信息,这是可取的,但是,有一些网站呢,对我们的网络爬虫做了一些限制, ...
- 爬取西刺网的免费IP
在写爬虫时,经常需要切换IP,所以很有必要自已在数据维护库中维护一个IP池,这样,就可以在需用的时候随机切换IP,我的方法是爬取西刺网的免费IP,存入数据库中,然后在scrapy 工程中加入tools ...
- 使用Selenium&PhantomJS的方式爬取代理
前面已经爬取了代理,今天我们使用Selenium&PhantomJS的方式爬取快代理 :快代理 - 高速http代理ip每天更新. 首先分析一下快代理,如下 使用谷歌浏览器,检查,发现每个代理 ...
随机推荐
- a标签的伪类
a 超链接 伪类:给元素添加特殊的效果 :link 未访问过的链接初始颜色 :visited 访问过后的链接颜色 :hover 鼠标移入(悬停)时的颜色 :active 鼠标按下时链接的颜色 书写时的 ...
- C# 防火墙操作之开启与关闭
通过代码操作防火墙的方式有两种:一是代码操作修改注册表启用或关闭防火墙:二是直接操作防火墙对象来启用或关闭防火墙.不论哪一种方式,都需要使用管理员权限,所以操作前需要判断程序是否具有管理员权限. 1. ...
- TLS Thread Local Storage
https://blog.csdn.net/yusiguyuan/article/details/22938671 https://blog.csdn.net/simsunny22/article/d ...
- 手机APP流量的发送与获取功能的实现
package com.loaderman.trafficdemo; import android.content.Context; import android.content.Intent; im ...
- Python Deque 模块使用详解,python中yield的用法详解
Deque模块是Python标准库collections中的一项. 它提供了两端都可以操作的序列, 这意味着, 你可以在序列前后都执行添加或删除. https://blog.csdn.net/qq_3 ...
- python中的set集合
当使用爬虫URL保存时,一般会选择set来保存urls,set是集合,集合中的元素不能重复,其次还有交集,并集等集合的功能, 爬虫每次获取的网页中提取网页中的urls,并保存,这就需要利用urls = ...
- django基础窗口类的使用
django基础窗口form表单的运用 具体效果图如下: 首先确定表单中的数据集,先自己创建一个forms.py或者在原来的models.py中添加: 1代码如下 class ContactForm( ...
- RN 图片处理 resizeMode
Image组件必须在样式中声明图片的宽和高.如果没有声明,则图片将不会被呈现在界面上. 我们一般将Image定义的宽和高乘以当前运行环境的像素密度称为Image的实际宽高. 当Image的实际宽 ...
- SqlServer try catch 捕获触发器\存储过程异常,结合 transaction 事务
SoEasy~,贴上代码看所有 ALTER trigger [dbo].[tgr_SG_Gathering_update] on [dbo].[SG_Gathering] for update --更 ...
- react中递归生成列表
import React, {Component} from 'react'; import { Menu, Icon } from 'antd'; import {Link} from 'react ...