Beautifulsoup提取

2024-09-29 18:54:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

<meta property="tall"/>
<meta property="wide" content="spiral"/>
<meta name="red"/>
<meta name="tall"/>
  1. 如何找到property的所有实例?在
  2. 那么我如何提取"tall"和{}?在
  3. 那么我如何提取property?在
  4. 如何找到"tall"的所有实例?在
  5. 我如何提取name和{}
  6. 我如何提取"tall"?在

    我可以轻松地提取meta的所有实例:

    ^{pr2}$

    但是,在那之后,我必须访问结果列表的每个元素,然后我可以得到property和{}之类的东西。但是如果可能的话,我宁愿跳过这一步直接获取property和{}的所有实例。

  7. 最后,如果我想用requests.get从一个网站获得网址,而这是一个网站,你必须点击底部的一个按钮,使其加载更多,我想要额外的东西,我怎么能做到这一点?


Tags: 实例name列表bs网站htmlpropertyred
2条回答

Beautiful soup是关于如何处理提取数据的,但首先要做的是:

这里test.html是您发布的内容。它有一个try, catch block的原因是,如果find操作失败,那么它不会打印错误而不会打印任何内容。在

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 ""

输出:

^{pr2}$

休息就是玩玩,但以上这些将帮助你开始。有些问题仍然模棱两可,所以我在上面举了一些例子来帮助你。在

教程和更多示例:Link to docs

我不是使用beauthoulsoup的专家,但我尝试了一下,下面是我的想法,希望这足以让你开始。只是要知道我可能有更优雅的解决方案。在

样板:

from bs4 import BeautifulSoup
import re

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

soup = BeautifulSoup(a)

问题:

^{pr2}$

二。在

ex = [p[i]['property'] for i in range(len(p))]
>> ['tall', 'wide']

我不太明白你的意思,也许已经被保险了?在

alltall = soup.findAll('meta', attrs = {'name':'tall'})
alltall += (soup.findAll('meta', attrs = {'property':'tall'}))
>> [<meta name="tall"/>, <meta property="tall"/>]

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

相关问题 更多 >

    热门问题