for func in self.__CrawlFunc__:
if func.__name__==site:
this_page_proxies = func(self)
for proxy in this_page_proxies:
print('Getting', proxy, 'from', site)
proxies.append(proxy)
return proxies
def crawl_daili66(self, page_count=4):
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('Crawling', 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('td:nth-child(2)').text()
yield ':'.join([ip, port])
def crawl_proxy360(self):
start_url = 'http://www.proxy360.cn/Region/China'
print('Crawling', start_url)
html = get_page(start_url)
if html:
doc = pq(html)
lines = doc('div[name="list_proxy_ip"]').items()
for line in lines:
ip = line.find('.tbBottomLine:nth-child(1)').text()
port = line.find('.tbBottomLine:nth-child(2)').text()
yield ':'.join([ip, port])
def crawl_goubanjia(self):
start_url = 'http://www.goubanjia.com/free/gngn/index.shtml'
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(' ', '')
if __name__ == '__main__':
# 二生三:实例化ProxyGetter
crawler = ProxyGetter()
print(crawler.__CrawlName__)
# 三生万物
for site_label in range(crawler.__CrawlFuncCount__):
site = crawler.__CrawlName__[site_label]
myProxies = crawler.get_raw_proxies(site)
道生一:元类的__new__中,做了四件事:
- 将“crawl_”开头的类方法的名称推入ProxyGetter.__CrawlName__
- 将“crawl_”开头的类方法的本身推入ProxyGetter.__CrawlFunc__
- 计算符合“crawl_”开头的类方法个数
- 删除所有符合“crawl_”开头的类方法
怎么样?是不是和之前创建ORM的__mappings__过程极为相似?一生二:类里面定义了使用pyquery抓取页面元素的方法分别从三个免费代理网站抓取了页面上显示的全部代理 。
如果对yield用法不熟悉,可以查看:
廖雪峰的python教程:生成器
二生三:创建实例对象crawler三生万物:遍历每一个__CrawlFunc__
- 在ProxyGetter.__CrawlName__上面,获取可以抓取的的网址名 。
- 触发类方法ProxyGetter.get_raw_proxies(site)
- 遍历ProxyGetter.__CrawlFunc__,如果方法名和网址名称相同的,则执行这一个方法
- 把每个网址获取到的代理整合成数组输出 。
那么 。。。怎么利用批量代理,冲击别人的网站,套取别人的密码,狂发广告水贴,定时骚扰客户? 呃!想啥呢!这些自己悟!如果悟不到,请听下回分解!年轻的造物主,创造世界的工具已经在你手上,请你将它的威力发挥到极致!请记住挥动工具的口诀:
- 道生一,一生二,二生三,三生万物
- 我是谁,我来自哪里,我要到哪里去
- Python元类再谈
- 原文出处: TypingQuietly
- 在Python中一切都是对象,类型也是对象;类比类型和实例的概念,类型也必然有自己的类型,十分合理 。事实上,类型的类型其实就是术语元类型的意思,python里面所有类型的元类型都是type 。默认情况下我们新建一个类,在不手动指定元类型的前提下,type会被指定为元类型,元类型能够控制类型的创建和初始化 。
- 一般情况下我们能够通过关键字class来定义一个新的自定义类型,但也能够通过type动态的生成一个新的类型,下面的两种实现方式等价:
- type('SomeKlass', (object,), {'foo':2, 'bar': 4})
- class SomeKlass(object):
- foo = 2
- bar = 4
- 借助这个例子,我们还能顺便看一下一些关于默认元类type的信息:
- Python
- >>> someobject = SomeKlass()
- >>> someobject.__class__
- <class __main__.SomeKlass>
- >>> SomeKlass.__class__
推荐阅读
- 首播破亿,口碑两极,《三体》能否帮B站走出“暗黑森林”?
- 丝袜两条线的在哪一边
- 16岁女生标准身高
- 马桶两个孔怎么堵图解
- 钱塘江大潮形成原因是哪两点 钱塘江大潮形成原因
- 辣椒酱的做法
- 豆瓣酱拌茄子的做法
- kamille hand cream_德国的护手霜 一个是Herbacin Wuta Kamille 俗称小甘菊 另一个就叫Kamill 这两种有啥区别
- 淘宝可以同时在两个手机上登录吗
- 湖光秋月两相和的拼音 湖光秋月两相和