设为首页 加入收藏

TOP

【学习笔记】PYTHON网络爬虫与信息提取(北理工 嵩天)(五)
2019-09-06 00:28:43 】 浏览:135
Tags:学习 笔记 PYTHON 网络 爬虫 信息 提取 理工 嵩天
on、yaml
标记后的信息可形成信息组织结构,增加了信息维度
标记的结构与信息一样具有重要价值
标记后的信息可用于通信、存储或展示
标记后的信息更利于程序理解和运用

文本、声音、图像、视频imageimageimageimage

XML 最早的通用信息标记语言,可扩展性好,但繁琐    Internet上的信息交互与传递
JSON 信息有类型,适合程序处理(js),较XML简洁      移动应用云端和节点的信息通信,无注释
YAML 信息无类型,文本信息比例最高,可读性好       各类系统的配置文件,有注释易读

信息提取的一般方法
从标记后的信息中提取所关注的内容xml、json、yaml
方法一:完整解析信息的标记形式,再提取关键信息
优点:信息解析准确
缺点:提取过程繁琐,速度慢
方法二:无视标记形式,直接搜索关键信息  对信息的文本查找函数即可
优点:提取过程简洁,速度较快
缺点:提取结果准确性与信息内容相关
融合方法:结合形式解析与搜索方法,提取关键信息
需要标记解析器及文本查找函数

<>.find_all(name, attrs, recursive, string, **kwargs)
返回一个列表类型,存储查找的结果
? name : 对标签名称的检索字符串
? attrs: 对标签属性值的检索字符串,可标注属性检索
? recursive: 是否对子孙全部检索,默认True
? string: <>…</>中字符串区域的检索字符串

<tag>(..) 等价于<tag>.find_all(..)
soup(..) 等价于soup.find_all(..)

扩展方法:

<>.find() 搜索且只返回一个结果,同.find_all()参数
<>.find_parents() 在先辈节点中搜索,返回列表类型,同.find_all()参数
<>.find_parent() 在先辈节点中返回一个结果,同.find()参数
<>.find_next_siblings() 在后续平行节点中搜索,返回列表类型,同.find_all()参数
<>.find_next_sibling() 在后续平行节点中返回一个结果,同.find()参数
<>.find_previous_siblings() 在前序平行节点中搜索,返回列表类型,同.find_all()参数
<>.find_previous_sibling() 在前序平行节点中返回一个结果,同.find()参数image

3.3 实例:大学排名爬取

#CrawUnivRankingB.py
import requests
from bs4 import BeautifulSoup
import bs4
 
def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""
 
def fillUnivList(ulist, html):
    soup = BeautifulSoup(html, "html.parser")
    for tr in soup.find('tbody').children:
        if isinstance(tr, bs4.element.Tag):
            tds = tr('td')
            ulist.append([tds[0].string, tds[1].string, tds[3].string])
 
def printUnivList(ulist, num):
    tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
    print(tplt.format("排名","学校名称","总分",chr(12288)))
    for i in range(num):
        u=ulist[i]
        print(tplt.format(u[0],u[1],u[2],chr(12288)))
     
def main():
    uinfo = []
    url = 'https://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html'
    html = getHTMLText(url)
    fillUnivList(uinfo, html)
    printUnivList(uinfo, 20) # 20 univs
main()

4 网络爬虫之实战

4.1正则表达式

正则表达式语法由字符和操作符构成
常用操作符
. 表示任何单个字符
[ ] 字符集,对单个字符给出取值范围[abc]表示a、b、c,[a‐z]表示a到z单个字符
[^ ] 非字符集,对单个字符给出排除范围[^abc]表示非a或b或c的单个字符
* 前一个字符0次或无限次扩展abc* 表示ab、abc、abcc、abccc等
+ 前一个字符1次或无限次扩展abc+ 表示abc、abcc、abccc等
? 前一个字符0次或1次扩展abc? 表示ab、abc
| 左右表达式任意一个abc|def 表示abc、def
{m} 扩展前一个字符m次ab{2}c表示abbc
{m,n} 扩展前一个字符m至n次(含n) ab{1,2}c表示abc、abbc
^ 匹配字符串开头^abc表示abc且在一个字符串的开头
$ 匹配字符串结尾abc$表示abc且在一个字符串的结尾
( ) 分组标记,内部只能使用| 操作符(abc)表示abc,(abc|def)表示abc、def
\d 数字,等价于[0‐9]
\w 单词字符,等价于[A‐Za‐z0‐9_]

经典正则表达式
^[A‐Za‐z]+$  由26个字母组成的字符串
^[A‐Za‐z0‐9]+$    由26个字母和数字组成的字符串
^‐?\d+$    整数形式的字符串
^[0‐9]*[1‐9][0‐9]*$    正整数形式的字符串
[1‐9]\d{5}    中国境内邮政编码,6位
[\u4e00‐\u9fa5]    匹配中文字符
\d{3}‐\d{8}|\d{4}‐\d{7}    国内电话号码,010‐68913536

ip地址
精确写法0‐99: [1‐9]?\d
100‐199: 1\d{2}
200‐249: 2[0‐4]\d
250‐255: 25[0‐5]
(([1‐9]?\d|1\d{2}|2[0‐4]\d|25[0‐5]).){3}([1‐9]?\d|1\d{2}|2[0‐4]\d|25[0‐5])

raw string类型(原生字符串类型)
re库采用raw string类型表示正则表达式,表示为:r’text’ 例如: r'[1‐9]\d{5}’      r’\d{3}‐\d{8}|\d{4}‐\d{7}’

首页 上一页 2 3 4 5 6 7 下一页 尾页 5/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python面试题之这两个参数是什么.. 下一篇Python 之初识函数 (day08 课堂..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目