Python爬虫入门爬虫入门——信息组织与提取方法(信息组织与提取方法(2))
1. 信息提取的一般方法信息提取的一般方法
指从标记的信息中提取关注的内容。上一章提到的信息标记有三种形式:XML、JSON、YAML。
一般意义上的几种方法一般意义上的几种方法:
方法一:完整的解析信息的标记形式,再提取关键信息。像XML、JSON、YAML等,需要标记解析器,例如bs4库的标签树
遍历,需要解析什么信息,去遍历这棵树就ok了。
优点:信息解析准确, 缺点:提取过程繁琐,速度慢。
方法二:无视任何标记信息,直接搜索关键信息。就像在一个Word文档中搜索关键词一样,根本不需要去关心文档具有什么
样的标题形式和格式,只需要我们对信息的文本查找函数即可。
优点:提取过程简单,速度较快。 缺点:提取结果缺乏准确性。
二者方法哪种好呢?现实生活中我们使用的,是一种融合的方法。
融合方法:结合形式解析与搜索方法,来提取关键信息。
2. 一个小例子一个小例子
例子的原网页:http://python123.io/ws/demo.html
实例:提取HTML中所有URL链接。
思路:(1)观察网页源代码,发现所有的URL链接都在标签中。
(2)搜索到所有的标签
(3)解析标签格式,提取herf后的链接内容。
import requests
from bs4 import BeautifulSoup #BeautifulSoup是一个类
r=requests.get("http://python123.io/ws/demo.html")
r.encoding=r.apparent_encoding
demo=r.text
soup=BeautifulSoup(demo,"html.parser") #两个参数,第一个是要解析的文章,第二个是“html的解析器”
for link in soup.find_all('a'):
print(link.get('href')) #这里的find_all方法,待会会在后面讲。
3. 基于基于bs4库的库的HTML内容查找方法内容查找方法
上面讲到的.find_all(name,attrs,rescursive,string,**kwargs)
返回一个列表类型,存储查找的结果。各参数的说明如下:
name:对标签名称的检索字符串
>>> soup.find_all('a')
[Basic Python, Advanced Python] >>> soup.find_all(['a','b'])
[The demo python introduces several python courses. , Basic Python, Advanced Python] >>> for tag in soup.find_all(True): #当参数为True时,默认
是所有的标签
print(tag.name)
html
head
title
body
p
b
p
a
a
>>> for tag in soup.find_all(re.compile('b')): #打印以b开头的标签
print(tag.name)
body
b
attrs:对标签属性值的检索字符串,可以标注属性检索
>>> soup.find_all('p','course') #对p标签的course属性值进行搜索
[
Python is a wonderful general-purpose programming language. You can learn Python from novice to professional by
tracking the following courses:
Basic Python and Advanced Python.