标签:end 4.0 summary use xpath style 实例 cte lock
@classmethod用法(修饰的函数,第一个参数cls默认是类名,调用方法:实例对象或类对象.方法)
class C_mthod(object): name = "f**k" def __init__(self,name): self.name = name @classmethod def t_mthod(cls): print("hello world",cls.name) d = C_mthod("F**K") C_mthod.t_mthod() ———————————————————— hello world f**k
@classmethod调用类静态方法,无法调用类继承方法
分享一个爬虫方法,仅供参考
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 import random 5 6 import requests 7 from lxml import etree 8 9 10 class WanfangSpider(object): 11 @classmethod 12 def crawl_with_keyword(cls, keyword): 13 url = ‘http://s.wanfangdata.com.cn/Paper.aspx?q=‘ + keyword 14 print url 15 response = requests.get(url, cls.get_headers()) 16 if response.status_code == 200: 17 return cls.get_info(response.text) 18 else: 19 return None 20 21 @classmethod 22 def get_headers(cls): 23 user_agent = [ 24 ‘Mozilla / 5.0(compatible;MSIE9.0;Windows NT 6.1;Trident / 5.0‘, 25 ‘Mozilla / 4.0(compatible;MSIE6.0;Windows NT 5.1‘, 26 ‘Mozilla / 5.0(compatible;MSIE7.0;Windows NT 5.1‘, 27 ‘Mozilla / 5.0(compatible;MSIE8.0;Windows NT 6.0‘, 28 ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36‘ 29 ] 30 headers = { 31 ‘User-Agent‘: random.choice(user_agent) 32 } 33 return headers 34 35 @classmethod 36 def get_info(cls, content): 37 tree = etree.HTML(content) 38 divs = tree.xpath(‘//*[@class="left-record"]‘) 39 result = [] 40 for div in divs: 41 a_dict = {} 42 url = div.xpath(‘div/a[@class="title"]/@href‘) 43 title = div.xpath(‘div/a[@class="title"]‘)[0].xpath(‘string(.)‘) 44 subtitle = div.xpath(‘div[@class="record-subtitle"]‘)[0].xpath(‘string(.)‘) 45 # print url, title, subtitle 46 if not title: 47 title = None 48 49 if url: 50 url = url[0] 51 else: 52 url = None 53 54 if subtitle: 55 subtitle = subtitle.strip() 56 else: 57 subtitle = None 58 a_dict[‘url‘] = url 59 a_dict[‘title‘] = title 60 a_dict[‘subtitle‘] = subtitle 61 result.append(a_dict) 62 return result 63 64 65 class It199Spider(object): 66 @classmethod 67 def crawl_with_keyword(cls, keyword): 68 url = ‘http://www.199it.com/archives/tag/‘ + keyword 69 print url 70 response = requests.get(url, cls.get_headers()) 71 if response.status_code == 200: 72 return cls.get_info(response.text) 73 else: 74 return None 75 76 @classmethod 77 def get_headers(cls): 78 user_agent = [ 79 ‘Mozilla / 5.0(compatible;MSIE9.0;Windows NT 6.1;Trident / 5.0‘, 80 ‘Mozilla / 4.0(compatible;MSIE6.0;Windows NT 5.1‘, 81 ‘Mozilla / 5.0(compatible;MSIE7.0;Windows NT 5.1‘, 82 ‘Mozilla / 5.0(compatible;MSIE8.0;Windows NT 6.0‘, 83 ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36‘ 84 ] 85 headers = { 86 ‘User-Agent‘: random.choice(user_agent) 87 } 88 return headers 89 90 @classmethod 91 def get_info(cls, content): 92 tree = etree.HTML(content) 93 articles = tree.xpath(‘//article‘) 94 result = [] 95 for article in articles: 96 a_dict = {} 97 98 # 提取正文 99 img_url = article.xpath(‘div[@class="entry-list-left"]/div/a/img/@src‘) 100 title = article.xpath(‘div[@class="entry-list-right"]/h2/a/text()‘) 101 url = article.xpath(‘div[@class="entry-list-right"]/h2/a/@href‘) 102 post_time = article.xpath(‘div[@class="entry-list-right"]/table/tr/td[2]/text()‘) 103 tag = article.xpath(‘div[@class="entry-list-right"]/table/tr/td[4]/a/text()‘) 104 summary = article.xpath(‘div[@class="entry-list-right"]/p[@class="post-excerpt"]/text()‘) 105 print img_url, url, title, post_time, tag, summary 106 107 # 构造字典 108 a_dict[‘img_url‘] = img_url[0] if img_url else None 109 a_dict[‘title‘] = title[0] if title else None 110 a_dict[‘url‘] = url[0] if url else None 111 a_dict[‘post_time‘] = post_time[0] if post_time else None 112 a_dict[‘tag‘] = tag[0] if tag else None 113 a_dict[‘summary‘] = summary[0] if summary else None 114 result.append(a_dict) 115 return result if len(result) < 10 else result[0: 10]
@staticmethod(不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。调用方法:实例对象或类对象.方法 )
class A(object): bar = 1 def foo(self): print(‘foo‘) @staticmethod def static_foo(): print(‘static_foo‘) print(A.bar) @classmethod def class_foo(cls): print(‘class_foo‘) print(cls.bar) cls().foo() A.static_foo() A.class_foo() —————————————————————— static_foo 1 class_foo 1 foo
面对对象之@classmethod、@staticmethod用法
标签:end 4.0 summary use xpath style 实例 cte lock
原文地址:http://www.cnblogs.com/patrick0715/p/6031321.html