在爬取网站信息的过程中,有些网站为了防止爬虫,可能会限制每个ip的访问速度或访问次数。对于限制访问速度的情况,我们可以通过time.sleep进行短暂休眠后再次爬取。对于限制ip访问次数的时候我们需要通过代理ip轮换去访问目标网址。所以建立并维护好一个有效的代理ip池也是爬虫的一个准备工作。

网上提供免费代理ip的网址很多,下面我们以西刺网站为例来建立一个有效的代理ip池。

项目流程:

第一步:构造请求代理ip网站链接

def get_url(url): # 国内高匿代理的链接

url_list = []

for i in range(1,100):

url_new = url + str(i)

url_list.append(url_new)

return url_list

get_url :生成要爬取目标网址的链接

第二步:获取网页内容

def get_content(url): # 获取网页内容

user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0'

headers = {'User-Agent': user_agent}

req = urllib.request.Request(url=url, headers=headers)

res = urllib.request.urlopen(req)

content = res.read()

return content.decode('utf-8')

get_content:接受的参数是传入的目标网站链接

第三步:提取网页中ip地址和端口号信息

def get_info(content): # 提取网页信息 / ip 端口

datas_ip = etree.HTML(content).xpath('//table[contains(@id,"ip_list")]/tr/td[2]/text()')

datas_port = etree.HTML(content).xpath('//table[contains(@id,"ip_list")]/tr/td[3]/text()')

with open("data.txt", "w") as fd:

for i in range(0,len(datas_ip)):

out = u""

out += u"" + datas_ip[i]

out += u":" + datas_port[i]

fd.write(out + u"\n") # 所有ip和端口号写入data文件

get_info:接收从get_content函数传来的网页内容,并使用etree解析出ip和端口号,将端口号和ip写入data.

第四步:验证代理ip的有效性

def verif_ip(ip,port): # 验证ip有效性

user_agent ='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0'

headers = {'User-Agent':user_agent}

proxy = {'http':'http://%s:%s'%(ip,port)}

print(proxy)

proxy_handler = urllib.request.ProxyHandler(proxy)

opener = urllib.request.build_opener(proxy_handler)

urllib.request.install_opener(opener)

test_url = "https://www.baidu.com/"

req = urllib.request.Request(url=test_url,headers=headers)

time.sleep(6)

try:

res = urllib.request.urlopen(req)

time.sleep(3)

content = res.read()

if content:

print('that is ok')

with open("data2.txt", "a") as fd: # 有效ip保存到data2文件夹

fd.write(ip + u":" + port)

fd.write("\n")

else:

print('its not ok')

except urllib.request.URLError as e:

print(e.reason)

verif_ip:使用ProxyHandler建立代理,使用代理ip访问某网址,查看是否得到响应。如数据有效,则保存到data2.txt文件

最后:调用各个函数

if __name__ == '__main__':

url = 'http://www.xicidaili.com/nn/'

url_list = get_url(url)

for i in url_list:

print(i)

content = get_content(i)

time.sleep(3)

get_info(content)

with open("dali.txt", "r") as fd:

datas = fd.readlines()

for data in datas:

print(data.split(u":")[0])

# print('%d : %d'%(out[0],out[1]))

verif_ip(data.split(u":")[0],data.split(u":")[1])

得到爬取结果

-----------------------------------------------------------分割线-------------------------------------------------------

本程序运行环境: Python 3.5.2

作者:赵宏田

最近很多人私信问我问题,平常知乎评论看到不多,如果没有及时回复,大家也可以加小编微信:tszhihu,进知乎大数据分析挖掘交流群,可以跟各位老师互相交流。谢谢。

python爬虫构建国外代理池_建立爬虫代理ip池相关推荐

  1. python pymysql连接池_杂项之pymysql连接池

    杂项之pymysql连接池 本节内容 本文的诞生 连接池及单例模式 多线程提升 协程提升 后记 1.本文的诞生 由于前几天接触了pymysql,在测试数据过程中,使用普通的pymysql插入100W条 ...

  2. java设计高并发内存池_高并发服务器-连接池的设计

    高并发服务器-连接池的设计 高并发服务器需要有一些池的设计,如内存池,连接池,数据库连接池. 池(pool)的设计主要考虑到一些资源的频繁申请和释放,尤其是在高并发的服务器中,几万甚至几十万并发每秒, ...

  3. java 字符串池_什么是Java字符串池?

    java 字符串池 As the name suggests, String Pool in java is a pool of Strings stored in Java Heap Memory. ...

  4. python如何爬取sci论文_通过爬虫确定SCI期刊的发表周期

    众所周知,SCI发表周期较长,从投稿到见刊时间跨度超过2年也不罕见,如果运气不好,文章投出去石沉大海,用几个月的时间等来一封拒稿信,很可能会影响到博士毕业或职称评选.因此,为了尽量避免漫长的等待过程, ...

  5. python爬取网店数据_如何爬虫天猫店铺数据python

    展开全部 本编博客是关于爬取天猫店铺中指定店铺的所有商品基础信息的爬虫,爬虫运行只需要输入相应店32313133353236313431303231363533e78988e69d8331333365 ...

  6. python抓取微博数据中心_微博爬虫开源项目汇总大全

    作者:阿橙 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模 ...

  7. python抓取pc端数据_「爬虫四步走」手把手教你使用Python抓取并存储网页数据!...

    爬虫是Python的一个重要的应用,使用Python爬虫我们可以轻松的从互联网中抓取我们想要的数据,本文将基于爬取B站视频热搜榜单数据并存储为例,详细介绍Python爬虫的基本流程.如果你还在入门爬虫 ...

  8. python爬虫工程师是什么级别_高级爬虫工程师能干什么 高级爬虫工程师有前途吗数...

    高级爬虫工程师有前途吗数据采集,数据清洗等等都是大数据分析,很屌很酷拽的好不好.大数据又是人工智方面的饲养员,天天打猪草,很辛苦的. 现在有很多软件在逐步替代爬虫工程师做的事,比如采集数据原先你得请一 ...

  9. python爬虫豆瓣评论实验报告_豆瓣爬虫实践-python版

    豆瓣登录,无验证码版: import requests #starturl = "https://www.douban.com/accounts/login" loginurl = ...

  10. python翻页爬豆瓣影评_荐爬虫7_《隐秘的角落》豆瓣影评爬取及可视化分析

    本文源码:百度云 提取码 pra2 影评爬取 豆瓣网有限制,各种类型的评论只可以爬取220条,所以我爬取了好评.一般.差评各220条,共计630条.爬取维度为评论类型.点赞数.评分.发布日期.评论. ...

最新文章

  1. 点云标注工具:1.PCAT
  2. (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  3. 转vc++ 类自己消失
  4. Swift3.0语言教程获取C字符串
  5. PostgreSQL 客户端乱码问题
  6. 函数节流你应该知道的那点事,建议收藏!
  7. 六核cpu安装SQL Server 2005时报错,提示启动服务失败
  8. python正则表达式提取字符串的字母_Python正则表达式提取一部分字符串
  9. 目前市场上的电脑一体机从计算机种类,电脑一体机发展方向是什么?
  10. 【系统设计】架构设计说明书
  11. 金融数据分析与挖掘实战练习2.1-2.4
  12. PhpStorm下Laravel代码智能提示
  13. QuantLib 金融计算——基本组件之 Date 类
  14. QQ自动登录 发消息给某人C++/C
  15. android apk 在线分析,apkanalyzer
  16. OpenGL入门教程
  17. 多级分类查询解决方案
  18. moc3041光耦驱动bta12一直导通
  19. Lonlife-ACM 1014 - Absolute Defeat [差分]
  20. GB/T 31402塑料--塑料表面抗菌性能试验方法

热门文章

  1. Asp .NetCore 支付宝网页授权登录
  2. 202109青少年软件编程(Python)等级考试(五级编程题)
  3. MongoTemplate地理位置查询(标准)
  4. 鸿蒙系统安全模式,菜鸟必看 如何在安全模式下使用光驱
  5. thinkpad Fn键设置
  6. Inception 模块作用
  7. 读《天才在左,疯子在右》03--灵魂深处
  8. 企业路由器和办公室局域网无线路由器设置
  9. linux脚本课程设计通讯录,Linux简单电子通讯录源码
  10. MySQL--备份还原常用命令