爬虫第一章笔记
2016-03-06 22:11
197 查看
本文代码为学习后自己加了很多注释
主要供自己以后查阅
感谢原作者的教学贴
# -*- coding: utf-8 -*- import urllib import sgmllib """ beautifulsoup的相关包导入 """ from bs4 import BeautifulSoup import re """ 导入url解析包 """ import urlparse """ 自定义一个类继承sgmllib的SGMParser类 复写SGMLParser的方法, 注意:unknown_html()方法名不能修改,好像是SGM内的方法 通过自定义类对象的feed(data)方法将解析数据传入 """ class handle_html_01(sgmllib.SGMLParser): def unknown_starttag(self,tag,attrs): print "------"+tag+" start------" print attrs def unknown_endtag(self,tag): print "------"+tag+" end------" """ 对对象进行删选 """ class handle_html_02(sgmllib.SGMLParser): def unknown_starttag(self,tag,attrs): try: for attr in attrs: if attr[0]=='href': print attr[1].encode('utf-8') except: pass def unknown_endtag(self,tag): pass """ beautifulsoup并不只是简单的解析html文档,实际上里面大有玄机: 五种解析器自动选择或者手动指定,每个解析器的偏重方向都不一样,有的偏重速度,有的偏重正确率。 自动识别html文档的编码,并且给出非常完美的解决方案,支持css筛选,各种参数的方便使用。 相关包 from bs4 import BeautifulSoup import urllib import re 关于正则表达式: ^:匹配开头 ?:好像是匹配任意字符(还没有验证),应该是https """ def test_bs(): web=urllib.urlopen("http://www.baidu.com") soup=BeautifulSoup(web.read()) tags_a=soup.findAll(name="a",attrs={'href':re.compile("^http?://")}) for tag_a in tags_a: print tag_a["href"] """ 测试所用方法 """ def test_01(): web=urllib.urlopen("http://www.baidu.com") #创建handle_html对象 web_handler=handle_html_02() #传输数据到解析器 web_handler.feed(web.read()) """ 测试url的合法性 首先导入urlParse包 查看结果scheme 为http就是链接 根据结果分析 o[0]就是scheme o[1]就是netloc 一次类推 其实分析就是 冒号前是scheme 双斜杠是 netloc 单斜杠后是 path 然后问号后是参数井号后不清楚 总之有分析过程 """ def test_urlparse(): url = set() url.add('javascript:void.com') url.add('http://freebuf.com/geek') url.add('https://freebuf.com:443/geek?username=1#sid') url.add('ftp://freeme.com/ss/s/s') url.add('sssfadea://ssss.ss') url.add('//freebuf.com/s/s/s') url.add('/freebuf.com/s/s/s/') url.add('//freebuf.com/s/s/s/') url.add('path/me') url.add('path?ss=1') url.add('path?ss=1&s=1') url.add('path?ss=1#arch') url.add('?ss=1') url.add('#arch') for item in url: print item o= urlparse.urlparse(item) print o #test_01() #test_bs() test_urlparse()
相关文章推荐
- 1205 吃糖果
- [Programming WCF Services]Chapter 1. WCF Essentials - Metadata Exchange
- 斜面上的根骨骼运动以及刚体测试
- windows操作系统记事本保存操作时间、字符映射表的打开、步骤记录器使用
- java的环境变量和系统属性
- C语言全局变量和静态变量
- UVA 11090(p333)----Going in Cycle!!
- MVC、MVP、MVVM
- 《逻辑思维简易入门》(第2版) 阅读笔记二
- js控制html下拉框select的选择
- 深度学习框架大战正在进行,谁将夺取“深度学习工业标准”的荣耀?
- 无人值守自动安装linux系统
- ansible<1>
- javascript删除,添加元素
- 解决js跨域问题的基本方法之 -------JSONP
- 2016/03/06 codes
- 钥匙串
- IOS控件之音频学习之旅
- HashMap LinkedHashMap TreeMap的区别
- nyoj 171 聪明的kk(数塔演变)