Python实现爬取可用代理IP

  在实现爬虫时,动态设置代理IP可以有效防止反爬虫,但对于普通爬虫初学者需要在代理网站上测试可用代理IP。由于手动测试过程相对比较繁琐,且重复无用过程故编写代码以实现动态抓取可用的代理IP。动态代理IP保存在Json文件中,以供后续具体项目爬虫使用,但所爬取的代理IP是免费IP,所以可能出现当时爬取能用,过一段时间无法使用的情况。

 1) 先从西刺代理网站上爬取前10页,速度较快的IP,保存到proxies数组中,其中proxy使用的是requests.get()可直接使用字典格式 

 1 print("Start find proxy in xichi...")
 2 headers = {
 3     ‘User-Agent‘: ‘Mozilla/5.0 (X11; Linux x86_64) ‘
 4                   ‘AppleWebKit/537.36 (KHTML, like Gecko) ‘
 5                   ‘Chrome/60.0.3112.101 Safari/537.36‘
 6 }
 7 # 保存西刺代理的IP汇总数组
 8 proxies = []
 9 for num in range(1,10):
10     # 西刺代理网站
11     response = requests.get("http://www.xicidaili.com/nn/%d"%(num),headers=headers)
12     soup = BeautifulSoup(response.text,"lxml")
13     ipInfos = soup.select(‘#ip_list > tr‘)
14
15     for ipInfo in ipInfos[1:]:
16         ipInfo = ipInfo.select("td")
17         if ipInfo[6].select("div > div")[0].get("class")[1] == "fast":
18             # 处理网页代理信息数据
19             ip = ipInfo[1].get_text().strip()
20             port = ipInfo[2].get_text().strip()
21             prc = ipInfo[5].get_text().strip().lower()
22             # 组合成requests要求的代理参数格式,格式字典形式如下
23             # proxies = {‘https‘:‘https://112.114.93.50:8118‘,‘http‘:‘https://122.72.18.34:80‘}
24             # 协议:协议://ip:端口
25             proxy = dict()
26             proxy[prc] = prc + "://" + ip + ":" + port
27             proxies.append(proxy)
28     time.sleep(random.randint(1, 5))
29
30 print("proxies counts is %d"%(len(proxies)))

  2) 使用proxies,模拟浏览器打开百度首页,如果返回status_code为200,就认为此代理可用,即可保存后续使用。 

 1 print("Starting test proxies...")
 2
 3 # 记录当前已找到可用IP数目
 4 okIpNum = 0
 5 for proxy in proxies:
 6     # 随机使用不同的userAgent
 7     userList = userAgentList.userList
 8     headers = {‘User-Agent‘: userList[random.randint(0, len(userList)-1)]}
 9     # request发送请求时使用不同的userAgent,同时带入测试IP代理
10     # 如出现异常则直接跳过,可能出现连接超市的异常等
11     try:
12         text_web = requests.get("https://www.baidu.com/",headers = headers, proxies = proxy)
13     except:
14         print(proxy," unuseable")
15         continue
16
17     if text_web.status_code == 200:
18         with open(filename, "a+") as f:
19             js = json.dumps(proxy)
20             f.write(js)
21         print(proxy, "useable")
22         okIpNum += 1
23     # 判断已经找到可食用的IP数目,从而退出程序
24     if okIpNum == needCount:
25         print("Already find %d useable proxies"%(okIpNum))
26         break
27
28     time.sleep(random.randint(1,3))

  此爬取方法还是用动态设置UserAgent,以及爬取过程随机sleep,以避免被服务器禁用。

原文地址:https://www.cnblogs.com/henley0000/p/9356928.html

时间: 2024-10-22 04:47:48

Python实现爬取可用代理IP的相关文章

python2.7爬取可用代理IP

import urllib2 import random import time import re #from lxml import etree  #第三方模块 def get_proxy(page): headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36' } r

Python 正则练习(一) 爬取国内代理ip

简单的正则表达式练习,爬取代理 ip. 仅爬取前三页,用正则匹配过滤出 ip 地址和 端口,分别作为key.value 存入 validip 字典. 如果要确定代理 ip 是否真的可用,还需要再对代理 ip 再进行筛查过滤,最终仅仅保存真实可用代理 ip. 可能需要修改的内容: xpath 替代正则进行抓取 ip 和端口: 验证代理 ip 是否可用: 再存入mogodb 数据库替代字典. import re import requests from collections import defa

如何爬取可用的IP代理

上一篇说到对付反爬虫有一个很关键的方法就是使用IP代理,那么我们应该如何获取这些可用的IP代理呢?这里分享一下自己这两天的一些爬取IP代理的心得体会. 1 步骤 1.找到几个提供免费IP代理的网站,获取IP数据源 2.验证对应的IP代理访问出口IP是否跟本机的出口IP一致,得到不一致的IP代理列表 3.根据自身的实验目的验证IP代理的响应速度,进行排序,择优选用 2 具体做法 1.可以上网搜索,有很多,例如西刺.快代理等等 2.可以在这里进行验证 3.这个就根据自身爬虫的需要,看是下载东西还是其

简单爬虫-爬取免费代理ip

环境:python3.6 主要用到模块:requests,PyQuery 代码比较简单,不做过多解释了 #!usr/bin/python # -*- coding: utf-8 -*- import requests from pyquery import PyQuery as pq class GetProxy(object): def __init__(self): # 代理ip网站 self.url = 'http://www.xicidaili.com/nn/' self.header

PHP简单爬虫 爬取免费代理ip 一万条

目标站:http://www.xicidaili.com/ 代码: <?php require 'lib/phpQuery.php'; require 'lib/QueryList.php'; require "db/shared/ez_sql_core.php"; require "db/mysql/ez_sql_mysql.php"; require "public/function.php"; use QL\QueryList; //

Python骚操作!利用Python来爬取IP代理!偷偷给文章刷阅读量!

二.代码 代码直接参考了下文,更多解读参见原文,其中将ip提取部分修改了下,并将用来测试IP是否可用的百度url改成了CSDN博客里文章的url. 进群:548377875   即可获取数十套PDF哦! 另外也试了下豆瓣......嗯,立马就"403",上不去了,所以看了本文想刷其他网站数据的朋友,还是三思而行,如果账号被封,概不负责哦.==. 代码(py3.5版本):源码奉上! # coding: utf-8 import urllib.request import urllib.p

python+scrapy 爬取西刺代理ip(一)(ubuntu环境下) -赖大大 -博客园

第一步:环境搭建 1.python2 或 python3 2.用pip安装下载scrapy框架 具体就自行百度了,主要内容不是在这. 第二步:创建scrapy(简单介绍) 1.Creating a project(创建项目) scrapy startproject 项目名称 2.Defining our item(定义我们的项目) 3.writing a spider(写spider) scrapy genspider (spider的名称)(爬取的网页) 4.writing & Configu

python扫描proxy并获取可用代理ip列表

mac或linux下可以work的代码如下: # coding=utf-8 import requests import re from bs4 import BeautifulSoup as bs import Queue import threading import random import re headers_useragents = [] headers_referers = [] headers_referers.append('http://www.google.com/?q=

python爬取免费优质IP归属地查询接口

python爬取免费优质IP归属地查询接口 具体不表,我今天要做的工作就是: 需要将数据库中大量ip查询出起归属地 刚开始感觉好简单啊,毕竟只需要从百度找个免费接口然后来个python脚本跑一晚上就ok了嘛~但是,网上免费接口要么限制访问频率(淘宝的),要么限制访问次数(百度及其他) 没辙了,从百度找到了几个在线查询的接口,要么不够准确(或者说她们的数据库太旧了),要么就是速度太慢了,跟限制访问似的(没办法,小规模人家的服务器的确不够好) 于是乎就想到了百度首页的ip接口,就这货: 为了防止泄露