了解了HTMLParser库的知识后,选择做一个小训练,对https://www.python.org/events/python-events/这个网址进行分析,之后输出其中每次会议的题目、时间和地点。
如果要简单了解下HTMLParser库可以点击打开
下面进入正题
这是网站的源码,由此可以看出会议全部都是在ul下,而一个一个会议则是分开在一个一个li中
整体的思路就是写一个继承了HTMLParser的类,并且重载方法,然后筛选出我们需要的date
class MyHTMLParser(HTMLParser): flag = 0 new = [] get_data = 0 def handle_starttag(self, tag, attrs): #判断该标签是否存在 if tag == 'ul': for attr in attrs: if re.match("list-recent-events menu",attr[1]): self.flag = 1 #处理a元素 if tag == 'a' and self.flag == 1: self.get_data = 'tittle' #处理time元素 if tag == 'time' and self.flag == 1: self.get_data = 'time' #处理span元素 if tag == 'span' and self.flag == 1: self.get_data = 'addr' #当处理尾标签时则初始flag def handle_endtag(self, tag): if self.flag == 1 and tag == 'ul': self.flag = 0 #对data的处理 def handle_data(self, data): if self.get_data and self.flag == 1: #如果找到了题目,则新建一个dict来保存 if self.get_data == 'tittle': self.new.append({self.get_data : data}) #如果找到了时间或者地点,则取出new这个list最后一个dict,然后添加键值 else: self.new[len(self.new)-1][self.get_data] = data self.get_data = None
全部的代码在这里
如果有问题可以及时问我