基于Python语言的IP代理池

环境:python3.6 MongoDB flask requests等第三方库 完整代码见: https://github.com/Lucareful/IPProxyPool 代理池概述 什么是代理池 代理池就是有代理IP组成的池子,它可以提供多个稳定可用的代理IP 为什么要实现代理池 我们在做爬虫的时候,最常见的一种反爬虫手段就是:IP反爬;也就是当同一个IP访问这个网站的次数过多,频率过高,就会限制这个IP的访问。就是需要经常换IP; 使用IP代理池是其中一个比较常用的方案 免费代理都是非常不稳定的,有10%是可用就很不错了 一些收费代理稳定性也不好 目的:从一堆不稳定的代理IP中,抽取高可用代理IP,给爬虫使用 代理池开发环境 python3开发语言 requests:发送请求,获取页面数据 lxml:使用XPATH从页面提取我们想要的书籍 pymonge:把提取到代理IP存储到MongoDB数据库中和MongoDB数据库中读取代理IP,给爬虫使用 Flask:用于提供WEB服务 代理池工作流程 1.代理池工作渡程描述: 代理IP采集模块->采集代理IP->检测代理IP->如果不可用用,直接过滤掉,如果可用,指定默认分数->存入数据库中 代理IP检测模块->从数据库中获取所有代理IP->检测代理IP->如果代理IP不可用用,就把分数-1,如果分数为0从数据库中删除,否则更新数据库,如果代理IP可用,恢复为默认分值,更新数据库 代理API模块->从数据库中高可用的代理IP给爬虫使用; ...

13 min · 6061 words · Luenci

妹子图爬虫(爬取妹子图图片)

python实现妹子图爬虫(爬取妹子网图片) 一个简单的小爬虫实现爬取妹子图网站上的图片。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 #coding=utf-8 import requests from bs4 import BeautifulSoup import os all_url = 'http://www.mzitu.com' #http请求头 Hostreferer = { 'User-Agent':'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)', 'Referer':'http://www.mzitu.com' } Picreferer = { 'User-Agent':'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)', 'Referer':'http://i.meizitu.net' } #此请求头破解盗链 start_html = requests.get(all_url,headers = Hostreferer) #保存地址 path = "D:\\mzitu\\" #找寻最大页数 soup = BeautifulSoup(start_html.text,"html.parser") page = soup.find_all('a',class_='page-numbers') max_page = page[-2].text same_url = 'http://www.mzitu.com/all/' for n in range(1,int(max_page)+1): ul = same_url+str(n) start_html = requests.get(ul, headers = Hostreferer) soup = BeautifulSoup(start_html.text,"html.parser") all_a = soup.find('div',class_='all').find_all('a',target='_blank') for a in all_a: title = a.get_text() #提取文本 if(title != ''): print("准备扒取:"+title) #win不能创建带?的目录 if(os.path.exists(path+title.strip().replace('?',''))): #print('目录已存在') flag=1 else: os.makedirs(path+title.strip().replace('?','').replace(':', '')) flag=0 os.chdir(path + title.strip().replace('?','').replace(':', '')) href = a['href'] html = requests.get(href,headers = Hostreferer) mess = BeautifulSoup(html.text,"html.parser") pic_max = mess.find_all('span') try: pic_max = pic_max[9].text #最大页数 if(flag == 1 and len(os.listdir(path+title.strip().replace('?',''))) >= int(pic_max)): print('已经保存完毕,跳过') continue for num in range(1, int(pic_max)+1): pic = href+'/'+str(num) html = requests.get(pic,headers = Hostreferer) mess = BeautifulSoup(html.text,"html.parser") pic_url = mess.find('img',alt = title) print(pic_url['src']) #exit(0) html = requests.get(pic_url['src'],headers = Picreferer) file_name = pic_url['src'].split(r'/')[-1] f = open(file_name,'wb') f.write(html.content) f.close() except Exception: pass print('完成 ') print('第',n,'页完成') 原文参考:https://blog.csdn.net/baidu_35085676/article/details/68958267

2 min · 523 words · Luenci