Python学习之网页抓取(二)
来源:互联网 发布:cad2005软件下载 编辑:程序博客网 时间:2024/05/22 14:26
这一篇实现的功能是:对下载的网页内容进一步提取内容,如网页编码类型,标题等。
#!/usr/bin/env python# -*- coding: GBK -*-'''Created on Jul 17, 2013@author: belong'''import urllibimport reclass Tools: def write_log(self, level, info): print '[' + level + ']' + info def match_regex(self,pattern,src): result = "" com = re.compile(pattern,re.I) matchers = com.findall(src) print matchers for matcher in matchers: result += matcher +" " return result.strip()#strip函数返回去掉两端空格的字符串 class Crawler: #获取一个url链接的所有urls def get_url(self, url): html = urllib.urlopen(url) # pattern = re.compile("http://.*?\.com",re.I) pattern = re.compile(r'[a-zA-z]+://[^\s]*\.html?', re.I) while True: data = html.read() if data: urls = pattern.findall(data) else: break html.close() return urls #下载url对应网页 def download_url(self, url, filename): Tools().write_log("info","开始下载") html = urllib.urlopen(url) f = open(filename, 'w') while True: page = html.read() if page: f.write(page); else: break html.close() f.close() Tools().write_log("info","网页下载成功") return page #广度优先遍历 def broad_traverse(self, start_url, number): Tools().write_log("info","开始遍历") visited = [] unvisited = [] unvisited.append(start_url) while len(unvisited): if len(visited) < number: url = unvisited.pop(0); print url, len(visited) i = len(visited)# self.download_url(url, str(i) + '.html') visited.append(url) url_list = self.get_url(url) for eachlink in url_list: if ((unvisited.count(eachlink) == 0) & (visited.count(eachlink) == 0)): unvisited.append(eachlink) else: break Tools().write_log("info","遍历成功") return visited def main(self): start_url = "http://www.baidu.com" self.broad_traverse(start_url, 10)#数据提取类class DataExtractor: #提取标题 def get_title(self,data): title = Tools().match_regex('<title>.*?<\/title>', data) if title == "": Tools().write_log( "Error", "标题匹配不成功") return title #提取内容格式 def get_type(self,data): type = Tools().match_regex('<meta.*content=.*?\/>', data) return type #提取字符类型 def get_charset(self,data): charset = Tools().match_regex('<meta.*?charset=.*?\/>', data) return charset def get_info(self,url): try: data = Crawler().download_url(url,str(11)+'.html') except: Tools().write_log("error", url+"抓取失败") raise Tools().write_log("info", "开始数据匹配") rst = {}#rst是一个字典 rst['title'] = self.get_title(data) print "title:",rst['title'] rst['type'] = self.get_type(data) print "type:",rst['type'] rst['charset'] = self.get_charset(data) print "charset:",rst['charset'] Tools().write_log("DEBUG",'title=%s,type=%s,type=%s'%(rst['title'],rst['type'],rst['charset'])) return rstdef main(): start_url = "http://www.baidu.com" crawler = Crawler() url_list = crawler.broad_traverse(start_url, 10) dataExtractor= DataExtractor() for url in url_list: dataExtractor.get_info(url)main()
- Python学习之网页抓取(二)
- Python学习之网页抓取(一)
- Python 抓取网页学习系列之一(网页编码格式)
- Python之抓取动态网页
- Python网页抓取之Lxml
- Python之抓取网页元素
- 利用Python抓取和解析网页(二)
- python抓取网页学习(1)--urllib/urllib2/requests
- Python之HTML的解析(网页抓取一)
- Python学习笔记-简易抓取网页-1
- 学习笔记-python抓取网页数据
- Python学习笔记-简易抓取网页-2
- python爬虫实践之网页抓取
- Python网页抓取之Beautiful Soup
- Python爬虫学习笔记二:百度贴吧网页图片抓取
- python项目之 抓取动态网页 抓取路由器客户
- 我的python学习之路----Python 3 抓取网页的 N 种方法
- Python 学习(二) -- 初试抓取动车事件表
- TFS入门使用教程--团队成员权限设置
- linux系统编程读书笔记 第五章
- Linux后台进程管理利器:supervisor
- JavaEE相关代码
- Linux USB "On-The-Go"(OTG) on OMAP H2 软件架构分析(三)
- Python学习之网页抓取(二)
- html 表单设计时对输入文本数据类型的限制
- 序列化 Serializable
- PHP设计模式-工厂系列(二)-工厂方法模式
- VS2008处理Excel2007
- 指针和指针的指针
- TFS-问题贴,记录我使用中的问题
- JS传中文到Action中出现中文乱码问题?
- OTG Transceiver --- ISP1301 的驱动代码分析(一)