邢雅晨【爬虫系列之四】beautifulsoup爬取糗事百科-喝醉的清茶
邢雅晨上一系列,我们已经通过request获取到页面的内容了,但是如何处理杂乱的代码,将当中有用的内容提取出来,这里有两个方法,正则表达式及beautifulsoup,但是正则表达式对初学者来说,有点复杂,而beautifulsoup很方便地提取出HTML或XML标签中的内容。接下来,介绍下beautifulsoup的用法。一、beautifulsoup简介及安装1.1、beautifulsoup简介
Beautiful Soup提供一些简单的、python式的用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。
Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。
Beautiful Soup已成为和l、html6lib一样出色的解释器,为用户灵活地提供不同的解析策略或强劲的速度。1.2、beautifulsoup安装
Debain或ubuntu系统apt-getinstallPython-bs4
Beautiful Soup 通过PyPi发布,所以可以使用easy_instal或pip安装,beautifulsoup4 ,这个包兼容Python2和Python3easy_install beautifulsoup4或pip install beautifulsoup4
如果没有安装easy_install或pip,可以直接下载BS4源码安装,然后通过setup.py安装Pythonsetup.py install即可。二、beautifulsoup基础用法
上图 展示了beautifulsoup 用法的结构图
这里我们一这一段html举例子
<ahref='test.html'class='article_link'>python</a>2.1、根据html网页字符串创建BeautifulSoup对象
soup = BeautifulSoup(html_doc, #html文档字符串
'html.parser', # html解析器
from_encoding='utf8'
)2.2、搜索节点 使用方法:find_all(name,attrs,string)
查找所有标签为a的节点soup.find_all('a')
查找所有标签为a,链接符合'/view/23.html'形式的节点
soup.find_all('a',href='/view/123.html')
soup.find_all('a',href=re.compile(r'/view/\d+\.htm'))
查找所有标签为div class为abc,文字为python的节点
soup.find_all('div',class_='abc',string='python')2.3、访问节点信息,得到节点:<ahref='1.html'>python</a>
获取查找的节点的标签名称:node.name
获取查找到a节点的href属性:node['href']
获取查找到的a节点的链接文字:node.get_text()三、beautifulsoup爬取糗事百科案例
import requests
from bs4 import BeautifulSoup
## 添加headers
headers = {
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.170 Safari/537.36"
}
url = ''
r = requests.get(url, headers)
soup = BeautifulSoup(r.text, 'lxml')
divs = soup.find_all('div', {'class': 'article block untagged mb15 typs_hot'})
for divTemp in divs:
contentSpan = divTemp.span.get_text()
print 'content:' + contentSpan
print '---------------------------'
下图是结果,可以将爬下来的东西,进行存入文件或者数据库,从而进行使用。
四、关于我