您的位置:首页 > 编程语言 > Python开发

Python-爬虫学习笔记(二)

2018-02-09 11:53 316 查看
前言

数据提取

BeautifulSoup
信息标记三种形式
XML

JSON

YAML

形式解析
基本元素

标签树的遍历

友好的显示html内容

直接搜索

RE-正则表达式
基本语法

常见实例

基本使用
一种方法

另一种方法

match对象的方法
贪婪匹配和最小匹配

注意点

前言

此次学习的主题是围绕机器学习所需的python库展开。

在学完了python的基础语法后,了解到机器学习还需要掌握一些python进阶知识:利用python爬取数据、数据分析与展示

于是在网上找了许多教程,发现北理工嵩天老师的python进阶MOOC系列非常好,这几篇python学习笔记也是源于嵩天老师的《Python网络爬虫与信息提取》和《Python数据分析与展示》。

此系列笔记方便自己日后复习python相关知识,也供正在学习python的朋友作参考。

数据提取

上篇笔记主要记录了爬取数据的方法库。但是爬取数据相对简单,而对已经爬取的数据内容的提取是重中之重。MOOC中主要介绍的处理方法是利用python的两个库:BeautifulSoup库、RE库。

本篇笔记则记录了这两个库的一些使用方法。

BeautifulSoup

BeautifulSoup库中处理数据的方法主要分为形式解析和直接搜索两种。

信息标记三种形式

信息分为信息标记信息内容两部分,同样都很重要 #(标记,信息)

目的:通过标记、或者直接搜索最终获得想要的内容(string)

XML



标记比较繁琐,扩展性好

JSON



缺点:无注释

YAML



可读性强,简洁,有注释

形式解析

# 常用

from bs4 import BeautifulSoup
soup = BeautifulSoup('r','html.parser')     #r为获取的html内容


基本元素



soup.a.name
soup.a.attrs
soup.a.string           #a是其中一个标签tag


标签树的遍历

# 下行遍历
<tag>.contents      #返回一个列表,包含所有儿子节点
<tag>.children      #返回一个迭代类型,所有儿子节点
<tag>.descendants   #返回一个迭代类型,所有子孙节点

# 上行遍历
<tag>.parent        #上一个父亲节点
<tag>.parents       #迭代类型,所有父辈节点

#平行遍历                #必须是同一个父亲节点下才是平行
<tag>.next_sibling      #一个
<tag>.previous_sibling  #一个
<tag>.next_siblings     #迭代
<tag>.previous_siblings #迭代

#迭代类型常用于循环语句中
<tag>.children
<tag>.next_siblings
最常用,因为是同一个平台上


友好的显示html内容

soup.prettify()
<tag>.prettify()


直接搜索

#最常用:
<tag>.find_all()
即<tag>()

soup.find_all(name,attrs,recursive,string,**kwargs)
#name 标签名  ['a','b']表示同时搜索多个标签名
#attrs属性
#recursive 默认为True表示搜索子+孙
#string信息内容/字符串
这里面的搜索条件必须严格相同且全面,不能模糊化。
要想模糊化用正则表达式




RE-正则表达式

RE库对数据的处理主要通过直接搜索想获取的数据内容或者与BeautifulSoup库配合使用。

基本语法





常见实例



基本使用

主要用于匹配字符串

import re
注意点:
对于赋值的match对象,调用时:
if match:
……
防止
4000
match是空值


一种方法





(r'',string,flags = 0)
search      #搜索所有 取第一个
match       #搜索开头 取第一个
findall     #搜索所有匹配的生成列表
finditer    #搜索出所有匹配生成迭代类型

(r'',string,maxsplit = ,flags =0)
(r'',repl,string,count = 0,flags=0)     #简单:(r'',repl,string)


另一种方法

regex = re.compile(r'')         #将语法句变为一个正则表达式对象




match对象的方法

针对于整个原信息:



针对于匹配后的match对象:



贪婪匹配和最小匹配



注意点

re.的单个函数都是match类型

所以用来爬虫的最好还是findall finditer
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息