您的位置:首页 > 其它

爬虫第一章笔记

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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: