bs4

对象的种类

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种: Tag , NavigableString , BeautifulSoup , Comment 。

Tag

Tag对象与XML或者HTML原生文档中的tag相同:

soup = BeautifulSoup(‘<b class="boldest">Extremely bold</b>‘)
tag = soup.b
type(tag)
# <class ‘bs4.element.Tag‘>

Tag有很多方法和属性,其中最重要的两个属性是name、attributes。

Name:  

每个tag都有自己的名字,通过 .name 来获取:

tag.name
# u‘b‘

Attributes:

一个tag可能有很多个属性,tag<b class="boldest">有一个“class”的属性,值为"boldest",tag的属性的操作方法与字典相同:

tag[‘class‘]
# u‘boldest‘

也可以直接”点”取属性, 比如: .attrs (.attrs返回一个字典,包含该tag的所有属性和值):

tag.attrs
# {u‘class‘: u‘boldest‘}tag.attrs["class"]# u‘boldest‘

tag的属性可以被添加,删除或修改. 再说一次, tag的属性操作方法与字典一样。

多值属性

在Beautiful Soup中多值属性的返回类型是list:

css_soup = BeautifulSoup(‘<p class="body strikeout"></p>‘)
css_soup.p[‘class‘]
# ["body", "strikeout"]

css_soup = BeautifulSoup(‘<p class="body"></p>‘)
css_soup.p[‘class‘]
# ["body"]

可遍历的字符串

字符串常被包含在tag内.Beautiful Soup用 NavigableString 类来包装tag中的字符串:

tag.string
# u‘Extremely bold‘
type(tag.string)
# <class ‘bs4.element.NavigableString‘>

tag中包含的字符串不能编辑,但是可以被替换成其它的字符串,用replace_with()方法:

tag.string.replace_with("No longer bold")
tag
# <blockquote>No longer bold</blockquote>

BeasutifulSoup

BeautifulSoup 对象表示的是一个文档的全部内容.大部分时候,可以把它当作 Tag 对象。

因为 BeautifulSoup 对象并不是真正的HTML或XML的tag,所以它没有name和attribute属性.但有时查看它的 .name 属性是很方便的,所以 BeautifulSoup 对象包含了一个值为 “[document]” 的特殊属性 .name:

soup.name
# u‘[document]‘

遍历文档树

子节点

Tag的名字

操作文档树最简单的方法就是告诉它你想获取的tag的name.如果想获取 <head> 标签,只要用 soup.head:

soup.head
# <head><title>The Dormouse‘s story</title></head>

soup.title
# <title>The Dormouse‘s story</title>

.contents和.children

tag的 .contents 属性可以将tag的子节点以列表的方式输出:

head_tag = soup.head
head_tag
# <head><title>The Dormouse‘s story</title></head>

head_tag.contents
[<title>The Dormouse‘s story</title>]

title_tag = head_tag.contents[0]
title_tag
# <title>The Dormouse‘s story</title>
title_tag.contentshead_tag = soup.head
head_tag
# <head><title>The Dormouse‘s story</title></head>

head_tag.contents
[<title>The Dormouse‘s story</title>]

title_tag = head_tag.contents[0]
title_tag
# <title>The Dormouse‘s story</title>
title_tag.contents
# [u‘The Dormouse‘s story‘]
# [u‘The Dormouse‘s story‘]

BeautifulSoup 对象本身一定会包含子节点,也就是说<html>标签也是 BeautifulSoup 对象的子节点:

len(soup.contents)
# 1
soup.contents[0].name
# u‘html‘

字符串没有 .contents 属性,因为字符串没有子节点。

通过tag的 .children 生成器,可以对tag的子节点进行循环:

for child in title_tag.children:
    print(child)
    # The Dormouse‘s story
时间: 2024-10-12 22:37:45

bs4的相关文章

Python2.7 基于bs4与requests库的网页图片简单爬取

爬虫入门新手,自学笔记,如果理解有错误请指正. import requests from bs4 import BeautifulSoup import urllib url = 'http://www.nipic.com/index.html' #图片网站 data = requests.get(url) #获取网站响应 soup = BeautifulSoup(data.text,'html.parser') #解析 imgs = soup.find_all('img') Beautiful

爬虫bs4

CSS 选择器:BeautifulSoup4 和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据. lxml 只会局部遍历,而Beautiful Soup 是基于HTML DOM的,会载入整个文档,解析整个DOM树,因此时间和内存开销都会大很多,所以性能要低于lxml. BeautifulSoup 用来解析 HTML 比较简单,API非常人性化,支持CSS选择器.Python标准库中的HTML解析器,也支持 l

python beautifulsoup bs4爬虫 爬取糗事百科

声明:仅用于学习语法,请勿用于非法用途 import urllib.request import re from bs4 import BeautifulSoup # -*- coding:utf-8 -*- url = 'http://www.qiushibaike.com/hot/' user_agent='Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers={'User-Agent':user_agent} request = u

python3实践-从网站获取数据(Carbon Market Data-GD) (bs4/Beautifulsoup)

结合个人需求,从某个网站获取一些数据,发现网页链接是隐藏的,需要通过浏览器看后面的代码来获取真实的链接. 下面这个案例,直接是从真实的链接中爬去数据. 此外,发现用pandas的read_html不能直接解析“lxml”的表格,有待后续研究. 另外,爬去的数据发现有很多空格符号,主要是 "\r"."\n"."\t", 字符串的去除 "\r"."\n"."\t" 的方法也一并添加在这个案例

BS4(BeautifulSoup4)的使用--find_all()篇

可以直接参考 BS4文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html#find-all 注意的是: 1.有些tag属性在搜索不能使用,比如HTML5中的 data-* 属性: data_soup = BeautifulSoup('<div data-foo="value">foo!</div>') data_soup.find_all(data-foo="val

使用bs4和urllib2抓取网页,都是坑

今天折腾了一天使用python抓取新浪门户上的新闻,其实难倒是不难,关键就是在下面三个问题上卡住了. 问题一:新浪新闻返回gzip格式的数据 一开始read data之后,希望使用decode将读取到的字符串转化为unicode字符串,显然这是python处理乱七八糟字符串的常用套路.但是一上午都在各种encode error,以为是返回的数据中包含了乱七八糟的字符导致的.后来想起来自己在实习的时候用过别人的代码抓取网页内容,经过了一个gzip的过程,于是才想起来很有可能是服务器返回的数据使用g

python BS4获取href网址

近期看那个scrape章节.有个s_urls[0]['href']  没法理解.以为python 有非数字下标数组.后面多方查询才知道这个是beautifulsoup 中的tag查询 https://stackoverflow.com/questions/5815747/beautifulsoup-getting-href?noredirect=1&lq=1 from bs4 import BeautifulSoup # what does Thread means from threading

python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding:utf-8from com.wenhy.crawler_baidu_baike import url_manager, html_downloader, html_parser, html_outputer print "爬虫百度百科调度入口" # 创建爬虫类class SpiderMai

python的基础爬虫(利用requests和bs4)

1.将请求网上资源: 1 import requests 2 res=requests.get('http://*******') 3 res.encoding='utf-8' 4 print(res.text) 这里面使用requests的get方法来获取html,具体是get还是post等等要通过网页头信息来查询: 比如百度的方法就是可以利用get得到. 2.将得到的网页利用BeautifulSoup进行剖析 1 from bs4 import BeautifulSoup 2 soup=Be