爬虫自学
爬虫自学
解析网页数据:
-
解析纯文本,可以选择正则表达式,(re模块)
-
解析HTML或XML格式的数据,则可以选择正则表达式、XPath、BeautifulSoup(lxml库和bs4库)
-
解析JSON格式的数据,则可以选择JSONPath(jsonpath模块)
-
正则表达式语法:
- 元字符
- .——匹配任何一个字符(换行符除外)
- ^——匹配字符串的开头
- $——匹配字符串的末尾
- |——连接多个子表达式,匹配与任意子表达式模式相同的字符串
- []——字符组,匹配其中的出现的任意一个字符
- -——连字符,匹配指定范围内的任意一个字符
- ?——匹配其前导字符0或1次
- *——匹配其前导字符0次或多次
- +——匹配其前导字符1次或多次
- {n}——匹配其前导字符n次
- {m,n}——匹配其前导字符m~n次
- ()——分组,匹配子组
- 预定义字符集
- \w——匹配”_“或任何字母和数字
- \s——匹配任意空白字符
- \d——匹配任意数字
- \b——匹配单词边界
- \W——与\w相反
- \S——与\s相反
- \D——与\d相反
- \B——与\b相反
- \A——仅匹配字符串开头
- \Z——仅匹配字符串结尾
- 元字符
-
re模块的使用:
- compile()函数:对正则表达式进行预编译,生成一个代表正则表达式的Pattern对象compile(pattern, flags=0)
- 参数flags用于指定正则表达式匹配模式:
- re.l:忽略大小写
- re.L:本地化识别匹配
- re.M:多行匹配
- re.S:是字符"."匹配所有字符,包括换行符
- re.U:根据Unicode字符集匹配字符
- re.A:根据ASCII字符集匹配字符
- re.X:允许使用更灵活的格式书写正则表达式
- 参数flags用于指定正则表达式匹配模式:
- 全文匹配:findall()与finditer()函数:
- findall():用于获取目标文本中所有与正则表达式匹配的内容,并将所有匹配内容以列表的形式返回;findall(pattern, string ,flags=0)
- finditer():获取目标文本中所有与正则表达式匹配的内容,但以迭代器形式返回。
- compile()函数:对正则表达式进行预编译,生成一个代表正则表达式的Pattern对象compile(pattern, flags=0)
-
Xpath
- 路径表达式,描述从一个节点到另一个节点或一组节点的顺序。
- 节点名称——选取此节点的所有子节点
- /——从根节点选取直接子节点,相当于绝对路径
- //——从当前节点选取后代节点,相当于相对路径
- .——选取当前节点
- ..——选取当前节点的父节点
- @——选取属性节点
- 谓语
- 通配符
- *——匹配任何元素节点
- @*——匹配任何属性节点
- node()——匹配任何类型的节点
-
lxml库
- etrr模块
- ElementTree类的对象可以理解为一个HTML或XML文档的节点树。
- parse()函数parse(source, parser=None, base_url=None)
- source:必选参数,表示待解析的内容,该参数支持4种类型的取值,分别是打开的文件对象(二进制打开),类似文件的对象,字符串形式的文件名称,字符串形式的URL
- parser:可选参数,表示解析器
- base_url:可选参数,表示基础URL
- HTML()函数用于从字符串常量中解析HTML文档或片段,并能够自动补全文档或片段缺失的元素
- fromstring()函数和XML()函数功能相同,都可以从字符串常量中解析XML文档或片段
- Element类对象可以理解为XML或HTML文档的节点,可以使用len()、append()、remove()等方法修改节点,也可以使用索引、切片等获取节点集中的子节点。
- find()方法:从节点树的某个节点开始查找,返回匹配到的第一个子节点
- findall()方法:从节点树的某个节点开始查找,以列表形式返回匹配到的所有子节点
- xpath()方法:从节点树的根节点或某个节点开始查找,以列表形式返回匹配到的所有子节点。
-
BeautifulSoup
- element.Tag类:表示HTML中的标签,是最基本的信息组织单元,有两个非常重要的属性:标签名tag,属性attrs
- element.NavigableString类:表示HTML中标签的文本
- BeautifulSoup类:表示HTML或XML节点树中的全部内容,支持遍历节点和索引文档树的大部分方法
- element.Comment类:表示元素内字符串的注释部分
- 步骤:
- 创建BeautifulSoup类对象BeautifulSoup(markup, features, parser_only, from_encoding)
- markup表示待解析内容,可以取值为字符串或类似文件的对象
- feature,表示指定的解析器,解析器名称包括lxml、lxml-xml、html.parser、html5lib
- parser_only:用于指定只解析部分文档,需要接收一个SoupStrainer类的对象。
- from_encoding:用于指定待解析文档的编码格式
- 创建BeautifulSoup类对象BeautifulSoup(markup, features, parser_only, from_encoding)
浙公网安备 33010602011771号