python爬取代理ip的示例

作者:Super~me 时间:2022-01-20 11:41:12 

要写爬虫爬取大量的数据,就会面临ip被封的问题,虽然可以通过设置延时的方法来延缓对网站的访问,但是一旦访问次数过多仍然会面临ip被封的风险,这时我们就需要用到动态的ip地址来隐藏真实的ip信息,如果做爬虫项目,建议选取一些平台提供的动态ip服务,引用api即可。目前国内有很多提供动态ip的平台,普遍价格不菲,而对于只想跑个小项目用来学习的话可以参考下本篇文章。

简述

本篇使用简单的爬虫程序来爬取免费ip网站的ip信息并生成json文档,存储可用的ip地址,写其它爬取项目的时候可以从生成的json文档中提取ip地址使用,为了确保使用的ip地址的有效性,建议对json文档中的ip现爬现用,并且在爬取时对ip有效性的时间进行筛选,只爬取时长较长、可用的ip地址存储。

实现

使用平台https://www.xicidaili.com/nn/来作为数据源,通过对http://www.baidu.com/的相应来判断ip的可使用性。引用lxml模块来对网页数据进行提取,当然也可以使用re模块来进行匹配提取,这里只使用lxml模块对数据进行提取。
访问https://www.xicidaili.com/nn/数据源,并且启动Fiddler对浏览器数据进行监听,我这里浏览器采用的是Proxy SwitchyOmega插件来配合Fiddler进行使用,在Fiddler找到/nn/*数据查看User-Agent信息并复制下来作为我们访问的头文件。如图:

python爬取代理ip的示例

引入模块


import requests
from lxml import etree
import time
import json

获取所有数据


def get_all_proxy(page):
 url = 'https://www.xicidaili.com/nn/%s'%page
 headers = {
   'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
 }
 response = requests.get(url, headers=headers)
 html_ele = etree.HTML(response.text)
 ip_eles = html_ele.xpath('//table[@id="ip_list"]/tr/td[2]/text()')
 port_ele = html_ele.xpath('//table[@id="ip_list"]/tr/td[3]/text()')
 print(ip_eles)
 proxy_list = []
 for i in range(0,len(ip_eles)):
   check_all_proxy(ip_eles[i],port_ele[i])
 return proxy_list

对数据进行筛选:


def check_all_proxy(host,port):
 type = 'http'
 proxies = {}
 proxy_str = "%s://@%s:%s" % (type, host, port)
 valid_proxy_list = []
 url = 'http://www.baidu.com/'
 proxy_dict = {
     'http': proxy_str,
     'https': proxy_str
   }
 try:
     start_time = time.time()
     response = requests.get(url, proxies=proxy_dict, timeout=5)
     if response.status_code == 200:
       end_time = time.time()
       print('代理可用:' + proxy_str)
       print('耗时:' + str(end_time - start_time))
       proxies['type'] = type
       proxies['host'] = host
       proxies['port'] = port
       proxiesJson = json.dumps(proxies)
       with open('verified_y.json', 'a+') as f:
         f.write(proxiesJson + '\n')
       print("已写入:%s" % proxy_str)
       valid_proxy_list.append(proxy_str)
     else:
       print('代理超时')
 except:
     print('代理不可用--------------->'+proxy_str)

运行程序:


if __name__ == '__main__':
 for i in range(1,11): #选取前十页数据使用
   proxy_list = get_all_proxy(i)
   time.sleep(20)
   print(valid_proxy_list)

生成的json文件:

python爬取代理ip的示例

来源:https://www.cnblogs.com/supershuai/p/12297312.html

标签:python,爬虫,代理,ip
0
投稿

猜你喜欢

  • Go 语言前缀树实现敏感词检测

    2024-05-05 09:27:18
  • Python、PyCharm安装及使用方法(Mac版)详解

    2021-04-19 22:45:42
  • 基于PyQt4和PySide实现输入对话框效果

    2023-06-11 13:30:58
  • Python+random模块实现随机抽样

    2022-01-19 23:58:20
  • 闲谈CSS3动画

    2010-05-07 12:34:00
  • Python的Flask框架中SQLAlchemy使用时的乱码问题解决

    2023-01-23 01:59:51
  • 微信跳一跳python代码实现

    2021-09-16 05:35:09
  • PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】

    2023-09-08 11:36:58
  • socket + select 完成伪并发操作的实例

    2022-05-09 14:23:32
  • Python 使用input同时输入多个数的操作

    2023-09-23 22:36:42
  • vue项目中api接口管理总结

    2024-04-30 10:42:44
  • FileSystem对象常用的文件操作函数有哪些?

    2009-11-01 15:11:00
  • PyTorch小功能之TensorDataset解读

    2023-02-26 06:06:27
  • python后端接收前端回传的文件方法

    2023-07-29 04:04:05
  • python3 爬取图片的实例代码

    2021-08-22 13:37:57
  • 如何使用Git优雅的回滚实现

    2022-03-17 15:49:15
  • 浅谈JavaScript Date日期和时间对象

    2024-05-03 15:58:01
  • 用PHP实现标准的IP Whois查询

    2023-11-14 19:35:01
  • 简单form标准化实例——整体布局

    2007-05-11 17:04:00
  • 关于python3安装pip及requests库的导入问题

    2021-10-06 11:23:26
  • asp之家 网络编程 m.aspxhome.com