为什么要用代理IP

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:1097524789

很多数据网站,对于反爬虫都做了一定的限制,这个如果写过一些爬虫程序的小伙伴应该都深有体会,其实主要还是IP进了小黑屋了,那么为了安全,就不能使用自己的实际IP去爬取人家网站了,这个时候,就需要采用代理IP去做这些事情……

为什么要用高匿代理

我们可以对比不同类型的代理的区别,根据代理的匿名程度,代理可以分为如下类别:

  • 高度匿名代理:会将数据包原封不动的转发,在服务端看来就好像真的是一个普通客户端在访问,而记录的IP则是代理服务器的IP。

  • 普通匿名代理:会在数据包上做一些改动,服务器上有可能发现这是个代理服务器,也有一定几率追查到客户端的真实IP。

  • 透明代理:不但改动了数据包,还会告诉服务器客户端的真实IP。

  • 间谍代理:指组织或个人创建的用户记录用户传输的数据,然后进行研究、监控等目的的代理服务器。

运行环境

Python运行环境:Windows + python3.6

用到的模块: requests、bs4、json

如未安装的模块,请使用 pip instatll xxxxxx 进行安装,例如: pip install requests

爬取西刺代理IP

这里,我只大概爬取 西刺高匿代理 50页的数据,当然了,爬100页,爬全部,都是可以的,就不多说了;

def run(self):
"""执行入口"""
page_list = range(1, 51)
with open("ip.json", "w") as write_file:
for page in page_list:
# 分页爬取数据
print('开始爬取第' + str(page) + '页IP数据')
ip_url = self.base_url + str(page)
html = self.get_url_html(ip_url)
soup = BeautifulSoup(html, 'html.parser')
# IP列表
ip_list = soup.select('#ip_list .odd')
for ip_tr in ip_list:
# 单条Ip信息
td_list = ip_tr.select('td')
ip_address = td_list[1].get_text()
ip_port = td_list[2].get_text()
ip_type = td_list[5].get_text()
info = {'ip': ip_address, 'port': ip_port, 'type': ip_type}
# 先校验一下IP的有效性再存储
check_res = self.check_ip(info)
if check_res:
print('IP有效:', info)
self.json_data.append(info)
else:
print('IP无效:', info)
json.dump(self.json_data, write_file)
复制代码

检测代理IP是否有效

爬取到的代理IP可能不能用,为了方便使用的时候,不报太多异常错误,所以需要先检测一下IP是否能正常使用,是否是有效代理IP,我这里列了三个网站,都可以很方便的检测IP地址是否能有效使用

def check_ip(self, ip_info):
"""测试IP地址是否有效"""
ip_url = ip_info['ip'] + ':' + str(ip_info['port'])
proxies = {'http': 'http://' + ip_url, 'https': 'https://' + ip_url}
res = False
try:
request = requests.get(url=self.check_url, headers=self.header, proxies=proxies, timeout=3)
if request.status_code == 200:
res = True
except Exception as error_info:
res = False
return res
复制代码

存储代理IP

我这里就不搞那些花里胡哨的,我直接把所有有效的代理IP的 json 格式的数据存储到文件中,当然了,也可以存储到 MongoDB 或者 MySQL 数据库中,不管怎样存储,在使用的时候都是随机选取一个IP,更加方便快捷。

完整代码

代码我已经上传了GitHub( GitHub源码地址 ),但是呢,作为一个热心的为了方便部分人想偷懒,不直接去交友网站查看,我在这里也贴一下源码出来吧,如果有啥问题,最好还是去交友网站找我,请接码……

#!/usr/bin/env python
# -*- coding: utf-8 -*- """
利用requests+bs4爬取国内高匿代理IP
author: gxcuizy
date: 2020-06-19
""" import requests
from bs4 import BeautifulSoup
import json class GetIpData(object):
"""爬取50页国内高匿代理IP"""
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36'}
base_url = 'https://www.xicidaili.com/nn/'
check_url = 'https://www.ip.cn/'
json_data = [] def get_url_html(self, url):
"""请求页面html"""
request = requests.get(url=url, headers=self.header, timeout=5)
html = False
if request.status_code == 200:
html = request.content
return html def check_ip(self, ip_info):
"""测试IP地址是否有效"""
ip_url = ip_info['ip'] + ':' + str(ip_info['port'])
proxies = {'http': 'http://' + ip_url, 'https': 'https://' + ip_url}
res = False
try:
request = requests.get(url=self.check_url, headers=self.header, proxies=proxies, timeout=3)
if request.status_code == 200:
res = True
except Exception as error_info:
res = False
return res def run(self):
"""执行入口"""
page_list = range(1, 51)
with open("ip.json", "w") as write_file:
for page in page_list:
# 分页爬取数据
print('开始爬取第' + str(page) + '页IP数据')
ip_url = self.base_url + str(page)
html = self.get_url_html(ip_url)
soup = BeautifulSoup(html, 'html.parser')
# IP列表
ip_list = soup.select('#ip_list .odd')
for ip_tr in ip_list:
# 单条Ip信息
td_list = ip_tr.select('td')
ip_address = td_list[1].get_text()
ip_port = td_list[2].get_text()
ip_type = td_list[5].get_text()
info = {'ip': ip_address, 'port': ip_port, 'type': ip_type}
# 先校验一下IP的有效性再存储
check_res = self.check_ip(info)
if check_res:
print('IP有效:', info)
self.json_data.append(info)
else:
print('IP无效:', info)
json.dump(self.json_data, write_file) # 程序主入口
if __name__ == '__main__':
# 实例化
ip = GetIpData()
# 执行脚本
ip.run()

python爬取高匿代理IP(再也不用担心会进小黑屋了)的更多相关文章

  1. 利用Python爬取可用的代理IP

    前言 就以最近发现的一个免费代理IP网站为例:http://www.xicidaili.com/nn/.在使用的时候发现很多IP都用不了. 所以用Python写了个脚本,该脚本可以把能用的代理IP检测 ...

  2. Python 爬取各大代理IP网站(元类封装)

    import requests from pyquery import PyQuery as pq base_headers = { 'User-Agent': 'Mozilla/5.0 (Windo ...

  3. 手把手教你使用Python爬取西刺代理数据(下篇)

    /1 前言/ 前几天小编发布了手把手教你使用Python爬取西次代理数据(上篇),木有赶上车的小伙伴,可以戳进去看看.今天小编带大家进行网页结构的分析以及网页数据的提取,具体步骤如下. /2 首页分析 ...

  4. python scrapy 爬取西刺代理ip(一基础篇)(ubuntu环境下) -赖大大

    第一步:环境搭建 1.python2 或 python3 2.用pip安装下载scrapy框架 具体就自行百度了,主要内容不是在这. 第二步:创建scrapy(简单介绍) 1.Creating a p ...

  5. python+scrapy 爬取西刺代理ip(一)

    转自:https://www.cnblogs.com/lyc642983907/p/10739577.html 第一步:环境搭建 1.python2 或 python3 2.用pip安装下载scrap ...

  6. Python 爬取高清桌面壁纸

    今天写了一个脚本用来爬取ZOL桌面壁纸网站的高清图片: 链接:http://desk.zol.com.cn/1920x1080/ 本程序只爬了美女板块的图片,若要下载其他板块,只需修改程序中的&quo ...

  7. Scrapy爬取西刺代理ip流程

    西刺代理爬虫 1. 新建项目和爬虫 scrapy startproject daili_ips ...... cd daili_ips/ #爬虫名称和domains scrapy genspider ...

  8. Python 在线免费批量美颜,妈妈再也不用担心我 P 图两小时啦

    引言 首先我承认自己标题党了,我就想提升点阅读量我容易么我,前几天的篇纯技术文阅读量都扯着蛋了. 毕竟阅读量太低实在是没有写下去的动力,我只能用点小手段偶尔提升下阅读量. 这篇文章我转换下套路,先放结 ...

  9. java爬取免费HTTP代理 code-for-fun

    偶然看到一个提供免费HTTP 代理IP的网站,该网站一两个小时就会更新一次,很有用.之后自己就用Java写了一个爬虫,爬取网站上的代理IP,以备后用. 网站源码: <!DOCTYPE html& ...

随机推荐

  1. (三)pandas 层次化索引

    pandas层次化索引 1. 创建多层行索引 1) 隐式构造 最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组 Series也可以创建多层索引 import numpy ...

  2. Centos7 python 安装 Ignoring ensurepip failure: pip 9.0.1 requires SSL/TLS

    安装python时出现Ignoring ensurepip failure:pip required SSL/TLS 因为没有安装OpenSSL 使用yum install openssl-devel

  3. linux专题(八):用户组管理

    http://dwz.date/UDf 每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理.不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个 ...

  4. maven自动创建项目目录骨架

    方法一: 1:打开命令窗口 在要创建项目的路径下按住H2SIT ,然后点击右键  ,在弹出菜单中选择 在此处打开命令窗口(W) 2:目录创建 方法二:

  5. db2数据库创建删除主键约束和创建删除唯一键约束

    创建.删除唯一约束: db2 "alter table tabname add unique(colname)" db2 "alter table tabname dro ...

  6. CentOS7 源码编译安装Nginx

    源码编译安装nginx     1.下载nginx源码包(这里以nginx-1.18.0为例) wget http://nginx.org/download/nginx-1.18.0.tar.gz 2 ...

  7. Python Ethical Hacking - KEYLOGGER(1)

    A program that records keys pressed on the keyboard. Common features: Store logs locally(local keylo ...

  8. LESS实战::not与:hover混合使用

    举个例子,有个HTML是这样的. <div class="item light">A</div> <div class="item" ...

  9. UVALive - 3644 X-Plosives (并查集)

    A secret service developed a new kind of explosive that attain its volatile property only when a spe ...

  10. P4547 [THUWC2017]随机二分图(状压,期望DP)

    期望好题. 发现 \(n\) 非常小,应该要想到状压的. 我们可以先只考虑 0 操作. 最难的还是状态: 我们用 \(S\) 表示左部点有哪些点已经有对应点, \(T\) 表示右部点有哪些点已经有对应 ...