Python beautifulsoup 获取标签中的值 怎么获取?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python beautifulsoup 获取标签中的值 怎么获取?相关的知识,希望对你有一定的参考价值。

<tr class='show_name'>
<td>张三</td>
<td>李四</td>
<td>王五</td>
</tr>

想得到td中的姓名值 即张三 李四 王五
html中还有很多tr表中 我只想获取class为show_name的tr中的td的值
如何获取 贴代码 谢谢

age = soup.find(attrs="class":"age") #你这里find只要一个attrs参数不会报错。

if age == None: #简单点可以用 if not age:

print u'没有找到'

else:

soup.find(attrs="class":"name")

#否则用findAll找出所有具有这个class的tr

tr = html.find("tr", attrs="class":"show_name")

tds = tr.findAll("td")

for td in tds:

print td.string # 或许不是string属性,你可以用dir(td)看看有哪些可用的。



扩展资料:

1、如果是函数定义中参数前的*表示的是将调用时的多个参数放入元组中,**则表示将调用函数时的关键字参数放入一个字典中。

1)如定义以下函数:

def func(*args):print(args)

当用func(1,2,3)调用函数时,参数args就是元组(1,2,3)

2)如定义以下函数:

def func(**args):print(args)

当用func(a=1,b=2)调用函数时,参数args将会是字典'a':1,'b':2

学python的同时一定会接触到其他技术,毕竟光会python这门语言是不够的,要看用它来做什么。比如说用 python做爬虫,就必须接触到html, http等知识。

python是现在最火的数据分析工具语言python的进阶的路线是数据清洗,爬虫,数据容器,之后是卷积,线性分析,和机器学习,区块连,金融方面的量化等高端进阶。

参考技术A 试试:
#html就是整个页面的html代码。
html = BeautifulSoup(html)

#当且仅当页面只有一个class="show_name"的时候才可以这么用
#否则用findAll找出所有具有这个class的tr
tr = html.find("tr", attrs="class":"show_name")

tds = tr.findAll("td")

for td in tds:
print td.string # 或许不是string属性,你可以用dir(td)看看有哪些可用的。追问

soup.find(attrs="class":"age")这个方法 若找不到 返回None?
能不能判断 返回None时 输出没有找到
返回不是None的时候 再soup.find(attrs="class":"name")

追答

是不是返回None我不知道,没去测试。
假设是返回None
那么按你的说法可以:
age = soup.find(attrs="class":"age") #你这里find只要一个attrs参数不会报错吗?
if age == None: #简单点可以用 if not age:
print u'没有找到'
else:
soup.find(attrs="class":"name")

追问

要是这么简单的话 我就不用问你了 这样写会报错的 返回的None不是string类型的 不能做判断 也不能做转换

追答# encoding: utf-8
from BeautifulSoup import BeautifulSoup
html = """
<tr class='show_name'>
    <td>张三</td>
    <td>李四</td>
    <td>王五</td>
</tr>
"""
html = BeautifulSoup(html)
print html.find('tr', attrs='class':'xxx')
print type(html.find('tr', attrs='class':'xxx'))
## 输出 None
## 输出 <type 'NoneType'>

## 以上是我的测试结果,你可以拷贝下去测试。

追问

if html.find('tr', attrs='class':'xxx')=='None': print 1else: print 2

你加上这样一句试试

输出的结果是2

追答if html.find('tr', attrs='class':'xxx')=='None':

有你这么用的吗?None 还加个'',你以为这是字符串啊。


if html.find('tr', attrs='class':'xxx')==None:
    print 1
else:
    print 2

本回答被提问者采纳
参考技术B 推荐使用的是 PyCharm,大部分用的都是这个,还有一部分坚守再sublime text上:
mport urllib
from BeautifulSoup import BeautifulSoup
url = 连接;
allData=
content = urllib.urlopen(url).read()
soup = BeautifulSoup(content)
tags1 = soup.findAll('tr', class: even right)
tags2 = soup.findAll('tr', class: odd right)
上面的就是利用写的一些代码,是要取出网页中class 为even right 的所有tr和所有class为odd right的所有tr取出之后就可以打印出他的内容。
参考技术C

使用beautifulsoup的方法如下:

import urllib
from BeautifulSoup import BeautifulSoup
url = 连接
content = urllib.urlopen(url).read()
soup = BeautifulSoup(content)
tags1 = soup.findAll('tr', class: even right)
tags2 = soup.findAll('tr', class: odd right)

    上面的就是利用beautifulsoup写的代码;

    要取出网页中class 为even right 的所有tr和所有class为odd right的tr;

    所有tr取出之后就可以打印出它的内容,就可以获取值了。

参考技术D 推荐使用的是 PyCharm,大部分用的都是这个,还有一部分坚守再sublime text上:
mport urllib
from BeautifulSoup import BeautifulSoup
url = 连接;
allData=
content = urllib.urlopen(url).read()
soup = BeautifulSoup(content)
tags1 = soup.findAll('tr', class: even right)
tags2 = soup.findAll('tr', class: odd right)
上面的就是利用写的一些代码,是要取出网页中class 为even right 的所有tr和所有class为odd right的所有tr取出之后就可以打印出他的内容。

Python/BeautifulSoup - 如何从元素中删除所有标签?

【中文标题】Python/BeautifulSoup - 如何从元素中删除所有标签?【英文标题】:Python/BeautifulSoup - how to remove all tags from an element? 【发布时间】:2013-04-18 20:29:06 【问题描述】:

如何简单地从 BeautifulSoup 中找到的元素中删除所有标签?

【问题讨论】:

【参考方案1】:

简单地将内容作为文本而不是 html 获取的代码:

'html_text' 参数是您将传递给此函数以获取文本的字符串

from bs4 import BeautifulSoup

soup = BeautifulSoup(html_text, 'lxml')
text = soup.get_text()
print(text)

【讨论】:

已添加,查看即可。【参考方案2】:

这里是源代码:你可以得到正好在 URL 中的文本

URL = ''
page = requests.get(URL)
soup = bs4.BeautifulSoup(page.content,'html.parser').get_text()
print(soup)

【讨论】:

【参考方案3】:

bs4 中的 BeautifulStoneSoup 消失了,在 Python3 中变得更加简单

from bs4 import BeautifulSoup

soup = BeautifulSoup(html)
text = soup.get_text()
print(text)

【讨论】:

最好使用get_text()而不是getText() 这是为什么呢?可能确实如此,但了解原因会有所帮助。 getText() 是 bs3 语法,不符合 pep8。它可能会被弃用。【参考方案4】:

使用get_text(),它将文档中或标签下的所有文本作为单个Unicode字符串返回。

例如,从以下文本中删除所有不同的脚本标签:

<td><a href="http://www.irit.fr/SC">Signal et Communication</a>
<br/><a href="http://www.irit.fr/IRT">Ingénierie Réseaux et Télécommunications</a>
</td>

预期结果是:

Signal et Communication
Ingénierie Réseaux et Télécommunications

这里是源代码:

#!/usr/bin/env python3
from bs4 import BeautifulSoup

text = '''
<td><a href="http://www.irit.fr/SC">Signal et Communication</a>
<br/><a href="http://www.irit.fr/IRT">Ingénierie Réseaux et Télécommunications</a>
</td>
'''
soup = BeautifulSoup(text)

print(soup.get_text())

【讨论】:

【参考方案5】:

为什么我没有看到任何关于unwrap 方法的答案?或者,更简单的是get_text 方法

http://www.crummy.com/software/BeautifulSoup/bs4/doc/#unwrap http://www.crummy.com/software/BeautifulSoup/bs4/doc/#get-text

【讨论】:

【参考方案6】:

可以使用bs4中的decompose方法:

soup = bs4.BeautifulSoup('<body><a href="http://example.com/">I linked to <i>example.com</i></a></body>')

for a in soup.find('a').children:
    if isinstance(a,bs4.element.Tag):
        a.decompose()

print soup

Out: <html><body><a href="http://example.com/">I linked to </a></body></html>

【讨论】:

【参考方案7】:

看起来就是这样!就这么简单

通过这一行,您可以将当前元素中的所有文本部分连接在一起

''.join(htmlelement.find(text=True))

【讨论】:

以上是关于Python beautifulsoup 获取标签中的值 怎么获取?的主要内容,如果未能解决你的问题,请参考以下文章

Python BeautifulSoup从span标签获取数据

Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释

python3用BeautifulSoup用limit来获取指定数量的a标签

Python/BeautifulSoup - 如何从元素中删除所有标签?

Python利用BeautifulSoup4库获取input标签的value值

Python3 爬虫U11_BeautifulSoup4之select和CCS选择器提取元素