在urllib库里还提供了parse,它定义了URL的标准接口:https、http、ftp、mms等,实现URL各部分的抽取、合并以及连接转换
一、parse模块有以下方法:返回ParseResult
1、urlparse()
结果如下:
URL:"https://www.baidu.com/index.html;user?id=5#comment",而一个标准连接格式:scheme://netloc/path;params?query#fragment
协议://域名/路径;参数?查询条件#锚点 ://前面就是scheme代表协议;第一个/符合前表示netloc表示域名 ;前表示路径 ?号前表示参数 #号前表示查询条件 #后表示锚点 一个标准的URL都会符合这个规则。利用urlparse()方法可将URL拆分开
完整的API:urlparse(urlstring, scheme=' ' ,allow_fragments=True ) urlstring表示带解析的URL scheme表示默认协议 allow_fragment:表示是否忽略fragment(锚点)
1.1假设链接没有带协议,则会将scheme设置作为默认协议
1.2假设链接带有协议,scheme设有另外的协议,则会根据链接的协议
1.3allow_fragments:是否忽略fragment(锚点),若忽略它则会解析为path、parameters或query的一部分,而fragment部分则为空
1.4假设URL中不包含params和query ,fragment会被解析为path的一部分
1.5 urlsplit():它与urlparse()相似,它不在单独解析params这部分,且只返回5个结果并把params合并到path中
1.6 urlunparse():它对立于urlparse(),它接收参数是一个可跌打对象,且长度必须为6,否则会抛出参数数量不足或过多的异常。它用于构造URL
1.7 urlunsplist() 和1.6相似,但长度必须为5 ,不够或超过都会报错。
2.1urlencode(),它在构造GET请求参数的时候非常有用
2.2parse_qs():反序列,它可将GET参数转为字典类型,按书上描述的结果是:{'name':['germey'] , 'age':[22]},我运行的结果如下 其中parse_qsl()也一样 只不过parse_qsl()返回元组组成的列表
2.3quote()和unquote(),quote()方法可以将内容转化为URL编码的格式,而unquote()方法则是反过来
三、Robots协议,Robots协议也叫爬虫协议,用来告诉爬虫和搜索引擎那些页面不能抓取,那些能抓取,它通常有一个叫robots.txt文件本,一搬再网站点的根目录下
样式:User-agent:* 描述搜索爬虫名称
Disallow:/ 不允许抓取的目录
Allow:/public/ 允许爬取public目录
3.1使用robotparser解析robots判断爬虫是否有权限爬取这个网页
rp=urllib.robotparser.RobotFileParser(url=' ')
rp.set_url():用来设置robots.txt文件的连接,若在声明RobotFileParser对象时传入链接,则不需要使用该方法
rp.read() :用来解析robots文件,并进行分析
rp.parse() :用来解析robots.txt文件,它会按照robots.txt的语法规则来分析内容
rp.can_fetch():判断网页是否可被抓取
rp.mtime():返回上次抓取和分析robots时间
rp.modified():将当前时间设置为上次抓取和分析robots.txt时间
反正我使用rp.can_fetch()返回的全部是Flase