【Python爬虫】BeautifulSoup4 库的一些用法

 Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree)。 
它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作。它可以大大节省你的编程时间。

安装 Beautiful Soup
 如果你安装了python3,可以在windows的命令行CMD运行下面命令
pip3 install BeautifulSoup4  

安装解析器
 Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,其中一个是 lxml .在windows的命令行CMD,可以选择下列方法来安装lxml
pip3 install lxml 
 下表列出了主要的解析器,以及它们的优缺点:

解析器使用方法优势劣势
Python标准库BeautifulSoup(markup, "html.parser")
  • Python的内置标准库
  • 执行速度适中
  • 文档容错能力强
  • Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差
lxml HTML 解析器BeautifulSoup(markup, "lxml")
  • 速度快
  • 文档容错能力强
  • 需要安装C语言库
lxml XML 解析器

BeautifulSoup(markup, ["lxml", "xml"])

BeautifulSoup(markup, "xml")

  • 速度快
  • 唯一支持XML的解析器
  • 需要安装C语言库
html5libBeautifulSoup(markup, "html5lib")
  • 最好的容错性
  • 以浏览器的方式解析文档
  • 生成HTML5格式的文档
  • 速度慢
  • 不依赖外部扩展

具体可以参考文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/#id15 

 推荐使用lxml作为解析器,因为效率更高. 在Python2.7.3之前的版本和Python3中3.2.2之前的版本,必须安装lxml或html5lib, 因为那些Python版本的标准库中内置的HTML解析方法不够稳定.
 使用BeautifulSoup及解析器lxml解析源代码,能够得到一个 BeautifulSoup 的对象,并能按照标准的格式的结构输出。

看一下下面的例子

url = requests.get('http://www.xingmeng365.com/articles.asp?id=7')
url.encoding = 'gb2312'
html_doc = url.text
soup = BeautifulSoup(html_doc,"lxml")

其中url=requests.get('链接'),通过request库,获取源代码,然后通过encoding = 'gb2312'转换格式
html_doc = url.text将源代码转换为文件,然后通过BeautifulSoup及解析器lxml,得到一个 BeautifulSoup 的对象,并能按照标准的格式的结构输出。

Beautiful Soup三种常见用法

1) 搜索tag:

print(soup.head)                 #获取头部
print(soup.title)                #获取标题
print(soup.h1)                   #获取h1标签
print(soup.title,soup.h1)        #获取title和h1 find(list)

打印出来的内容:

<title>性感女神王雨纯黑色内衣写真妩媚迷人(1/13)_性感美女_星梦365</title>
<h1>性感女神王雨纯黑色内衣写真妩媚迷人</h1>

2) 搜索属性(attrs):

print(soup.find(id='link3'))     #获取id为link3的标签

3) 搜索文字(text):

print(soup.title.getText())      #获取title标签的文字内容
print(soup.h1.get_text())        #获取第h1标签的文字内容
print(soup.p.get_text())         #获取p标签的文字内容
print(soup.span.get_text())      #获取span标签的文字内容

打印出来的内容:

性感女神王雨纯黑色内衣写真妩媚迷人(1/13)_性感美女_星梦365
性感女神王雨纯黑色内衣写真妩媚迷人

getText()或者get_text()都是获取属性的文字内容。

4)循环获取内容:

#循环获取所有页面链接
for link in soup.find_all('a'):
    print(link.get('href'))

#循环获取页面所有图片链接
for link in soup.find_all('img'):
    print(link.get('src'))

#循环获取页面所有符合要求的图片链接
for link in soup.find_all('img'):
    if "/upload/image" in link.get('src'):
        print(link.get('src'))

articles.asp?id=7&mm=2
articles.asp?id=790
articles.asp?id=7&mm=2
articles.asp?id=371
articles.asp?id=420
articles.asp?id=278
articles.asp?id=391
articles.asp?id=102

/images/logo.png
/upload/image/20170811/20170811210545754575.jpg
/upload/Smallpic/20179232057110.jpg
/upload/Smallpic/20171061957350.jpg
/upload/Smallpic/2017962036430.jpg
/upload/Smallpic/201792805460.jpg
/upload/Smallpic/20178161949370.jpg

/upload/image/20170811/20170811210545754575.jpg

以上就是我们常用的一些方法,具体更复杂的方法可以参考官方文档。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值