python3-爬虫 07 一个简单的代理池

一个简单的代理池

使用redis数据库存储,使用时需要在setting文件中修改相应的信息

共包含:
	crawler.py: 获取模块,负责从以下两个网站爬取免费代理
		http://www.goubanjia.com
		http://www.66ip.cn
	util.py: 一个工具类,用于爬取免费代理
	
	redisSave.py:存储模块, 将爬取到的代理存入数据库
	getter.py: 辅助存储爬到的代理
	
	tester.py: 测试模块,测试代理的可用性

	api.py: 接口模块,用于获取可用代理
	
	scheduler.py: 调度模块,用于将以上模块以多线程的形式运行起来
	
	run.py: 程序入口,启动调度器
	demo.py: 一个小案例

	setting.py: 包含了所有的配置信息
	
ps:所有文件需建立在同一文件夹下
	使用时运行run.py不可关闭,再仿照demo.py进行修改
	代码由崔庆才大神的书中而来,稍作了一些整改
	才疏学浅,望各位海涵。

crawler.py

import json
from util import get_page
from pyquery import PyQuery as pq 

#获取模块

#元类,用于遍历Crawler类中的爬取函数,方便数据存取
class ProxyMetaclass(type):
	def __new__(cls, name, bases, attrs):
		count = 0
		attrs['__CrawlFunc__'] = []
		for k, v in attrs.items():
			if 'crawl_' in k:
				attrs['__CrawlFunc__'].append(k)
				count += 1
		attrs['__CrawlFuncCount__'] = count 
		return type.__new__(cls, name, bases, attrs)

class Crawler(object, metaclass=ProxyMetaclass):
	def get_proxies(self, callback):
		proxies = []
		for proxy in eval("self.{}()".format(callback)):
			print('成功获取到代理', proxy)
			proxies.append(proxy)
		return proxies 

	def crawl_guobanjia(self):
		"""
		获取Guobanjia
		:return: 代理
		"""
		start_url = 'http://www.goubanjia.com'
		html = get_page(start_url)
		if html:
			doc = pq(html)
			tds = doc('td.ip').items()
			for td in tds:
				td.find('p').remove()
				yield td.text().replace('\n','')
				
	def crawl_daili66(self,page_count=4):
		"""
		获取代理66
		:param page_count: 页码
		:return: 代理
		"""
		start_url = 'http://www.66ip.cn/{}.html'
		urls = [start_url.format(page) for page in range(1, page_count + 1)]
		for url in urls:
			print('Crawler', url)
			html = get_page(url)
			if html:
				doc = pq(html)
				trs = doc('.containerbox table tr:gt(0)').items()
				for tr in trs:
					ip = tr.find('td:nth_child(1)').text()
					port = tr.find('tr:nth_child(2)').text()
					yield ':'.join([ip, port
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值