首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >美汤提取

美汤提取
EN

Stack Overflow用户
提问于 2014-05-24 04:48:59
回答 2查看 186关注 0票数 1

我有几个简单的bs问题(1-3一起,4-6一起).假设我有如下结构的HTML:

代码语言:javascript
复制
<meta property="tall"/>
<meta property="wide" content="spiral"/>
<meta name="red"/>
<meta name="tall"/>
  1. 如何找到property的所有实例
  2. 然后如何提取"tall""wide"
  3. 然后我如何提取property
  4. 如何找到"tall"的所有实例
  5. 然后如何提取nameproperty
  6. 然后如何提取"tall"? 我可以轻松地提取所有元实例: Soup1.find_all(“元”) 但是,在此之后,我必须访问结果列表中的每个元素,然后才能得到像propertyname这样的东西。但是,如果可能的话,我宁愿跳过这一步,直接获取propertyname的所有实例。
  7. 最后,如果我想从一个使用requests.get的网站上获得网址,而你必须点击底部的一个按钮才能使它加载更多,我想要额外的东西,我如何才能做到这一点呢?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-24 06:27:11

我不是使用BeautifulSoup的专家,但我尝试了一下,下面是我想出来的,希望这足以让您开始工作。请注意,我可能会有更优雅的解决方案。

样板:

代码语言:javascript
复制
from bs4 import BeautifulSoup
import re

a = """<meta property="tall"/>
<meta property="wide" content="spiral"/>
<meta name="red"/>
<meta name="tall"/>"""

soup = BeautifulSoup(a)

问题:

我。

代码语言:javascript
复制
p = soup.findAll('meta', attrs = {"property":re.compile('.*')})
>> [<meta property="tall"/>, <meta content="spiral" property="wide"/>]

二、

代码语言:javascript
复制
ex = [p[i]['property'] for i in range(len(p))]
>> ['tall', 'wide']

我不知道你是什么意思,也许它已经被覆盖了?

四.

代码语言:javascript
复制
alltall = soup.findAll('meta', attrs = {'name':'tall'})
alltall += (soup.findAll('meta', attrs = {'property':'tall'}))
>> [<meta name="tall"/>, <meta property="tall"/>]

我花了一些时间去寻找,但没有找到一种优雅的方法来做这件事。也许我忽略了什么。

票数 1
EN

Stack Overflow用户

发布于 2014-05-24 06:48:32

Beautiful soup完全是在玩提取数据的游戏,但首先要做的是:

这里test.html是您发布的内容。它之所以有一个try, catch block,是因为如果查找操作失败了,那么它就不会打印错误,而是什么都不打印。

代码语言:javascript
复制
from bs4 import BeautifulSoup

soup = BeautifulSoup (open(r'd:\test.html','r'))
#print soup.prettify()

items = soup.findAll("meta")

try:
    print "#How can I find all of the instances of property?"
    for all_prop in items:
        if all_prop['property']:
            print all_prop
except:
    print ""

try:
    print "#How can I then extract tall and wide?"
    for properties in items:
        print(properties['property'])
except:
    print ""


try:
    print "#all of the instances of tall"
    print soup.findAll('meta', attrs = {'property':'tall'})
    print soup.findAll('meta', attrs = {'name':'tall'})
    print ""
except:
    print ""

try:
    print "#How can I then extract tall?"
    for just_tall in items:
        if just_tall.get('property') == 'tall': 
            print just_tall.get('property')
        if just_tall.get('name') == 'tall':
            print just_tall.get('name')
except:
    print ""

输出:

代码语言:javascript
复制
#How can I find all of the instances of property?
<meta property="tall"/>
<meta content="spiral" property="wide"/>

#How can I then extract tall and wide?
tall
wide

#all of the instances of tall
[<meta property="tall"/>]
[<meta name="tall"/>]

#How can I then extract tall?
tall
tall

休息都是在玩,但以上这些都会帮助你开始工作。有些问题仍然含糊不清,所以我给你举了上面的例子来帮助你。

教程和更多示例:链接到文档

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23841424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档