两句话掌握 Python 最难知识点——元类出处( 五 )


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__中,做了四件事:

  1. 将“crawl_”开头的类方法的名称推入ProxyGetter.__CrawlName__
  2. 将“crawl_”开头的类方法的本身推入ProxyGetter.__CrawlFunc__
  3. 计算符合“crawl_”开头的类方法个数
  4. 删除所有符合“crawl_”开头的类方法
怎么样?是不是和之前创建ORM的__mappings__过程极为相似?
一生二:类里面定义了使用pyquery抓取页面元素的方法分别从三个免费代理网站抓取了页面上显示的全部代理 。
如果对yield用法不熟悉,可以查看:
廖雪峰的python教程:生成器
二生三:创建实例对象crawler三生万物:遍历每一个__CrawlFunc__
  1. 在ProxyGetter.__CrawlName__上面,获取可以抓取的的网址名 。
  2. 触发类方法ProxyGetter.get_raw_proxies(site)
  3. 遍历ProxyGetter.__CrawlFunc__,如果方法名和网址名称相同的,则执行这一个方法
  4. 把每个网址获取到的代理整合成数组输出 。
那么 。。。怎么利用批量代理,冲击别人的网站,套取别人的密码,狂发广告水贴,定时骚扰客户? 呃!想啥呢!这些自己悟!如果悟不到,请听下回分解!
年轻的造物主,创造世界的工具已经在你手上,请你将它的威力发挥到极致!请记住挥动工具的口诀: