系列文章目录
我们上一讲已经学习了request的用法。
现在我们需要来处理得到的HTML信息。
本章节我们使用BeautifulSoup。漂亮的汤
耗时约15min,建议实操。
使用的网站延续前一讲。
这一小节我们的任务是得到网站上的基础信息,比如作者等。
文章目录
前言
HTML的本质还是文本。那么对于python而言就是字符串。
所以从网页中提取信息,就变成了从字符串中提取子字符串。
但是又有什么不同呢?
-
HTML的文本并不是线性的,而是树形的(DOM树)。
-
HTML有很多标签属性等,这些和目标信息强相关。
所以提取子字符串有其特定的方法
一、BeautifulSoup是什么?
beautifulsoup4库,也称为Beautiful Soup库或者bs4库,用于解析和处理HTML和XML。
名字有那么点恶趣味,但是功能还是很强大的。
pip install beautifulsoup4
import bs4
print bs4
# 最经常
from bs4 import BeautifulSoup
二、使用步骤
1.使用HTML数据构建soup
代码如下(示例):
soup = BeautifulSoup(html_text, 'html.parser')
print(soup.p.string) # 第一段的字符串内容
# 作 者:圣骑士的传说
这里用.去索引信息,是比较简单的情形,所以有缩写。。。
但是真正主力的是接下来的两个工具。
2.soup.find(‘tagName’)
:param name: A filter on tag name. 一般就是tag
:param attrs: A dictionary of filters on attribute values. 用于限定的属性
:param recursive: If this is True, find() will perform a
recursive search of this PageElement's children. Otherwise, only the direct children will be considered.
:param limit: Stop looking after finding this many results. :kwargs: A dictionary of filters on attribute values.
:return: A PageElement.
:rtype: bs4.element.Tag | bs4.element.NavigableString
注意:
1. find的返回结果也是soup类型,所以可以迭代,一步步逼近目标。
2. recursive默认是FALSE,防止抓取到过多的信息。除非没什么干扰项
3. find只会返回自上而下找到的第一个。
3.soup.find_all()
爬虫大部分情况是在信息比较丰富的网页上批量的爬取数据。
所以find有很大的局限性。这个时候就需要find_all
和上面的find基本一致,除了返回的是一个列表之外。。。
见下面实操。
三、实操
为了避免反复爬取所以我们保存到文件中。
html_text = rep.text.encode('iso-8859-1').decode('gbk')
with open("shouye.txt","w",encoding="gbk") as outfile