当前位置: 首页 > 知识库问答 >
问题:

用Python和BeautifulSoup刮数据-无法提取div属性内容

楚洋
2023-03-14

我一直试图从一个使用Python和BeautifulSoup的网站中提取一些数据。我似乎找不到提取div属性内容的方法。

例如,由此:

<div class= "something">
    <div class="a" title="b">
        <img class="c" height="d" src="e" width="f" alt="g">
    </div>

我想提取标题,得到的结果是:

b

我试过用这个:

for all_data in soup.find_all('div', {'class': 'someClass'}):
    for headline in all_data.find_all('div', {'class': 'main-
     attributes'}):

        for rating in headline.find('div', {'class': 'Something'}):
            print(rating) 

现在,这当然拉出了整个div类。我想要的只是把标题拔出来。另一个问题是,当我试图将整个div类写到一个CSV中时,它要么写一个空白,要么就把整个CSV弄乱了。

我真的很感谢任何帮助。我是Python和编码的初学者,所以如果这个问题不够具体,我很抱歉。

提前谢谢!!干杯

共有2个答案

吕学
2023-03-14

如果要提取类A元素的title,可以执行如下操作:

from bs4 import BeautifulSoup

ad= '<div class= "something"> \
        <div class="a" title="b"> \
           <img class="c" height="d" src="e" width="f" alt="g"> \
        </div>'
soup = BeautifulSoup(ad,"lxml").find_all("div", {"class": "a"})
for items in soup:
    title=items['title']     #this format is used to fetch attributes of an element
    print(title)
杨学真
2023-03-14

>

  • find()返回单个元素,而不是列表。所以,您不能这样迭代它:

    for rating in headline.find('div', {'class': 'Something'}):
        print(rating)
    

    要获得title属性,您可以简单地在soup对象上使用['title'],如下所示:

    >>> html = '''<div class= "something">
    <div class="a" title="b">
        <img class="c" height="d" src="e" width="f" alt="g">
    </div>'''
    >>> soup = BeautifulSoup(html, 'lxml')
    
    >>> soup.find('div', class_='something').div
    <div class="a" title="b">
    <img alt="g" class="c" height="d" src="e" width="f"/>
    </div>
    
    >>> soup.find('div', class_='something').div['title']
    'b'
    

    或者,更准确地说,您可以使用

    soup.find('div', class_='something').find('div', class_='a')['title']
    

    阅读文档了解更多关于如何获取属性/属性内容的信息。

  •  类似资料:
    • 问题内容: 我试图在网页上的特定“输入”标签中提取单个“值”属性的内容。我使用以下代码: 我收到TypeError:列表索引必须是整数,而不是str 即使从Beautifulsoup文档中我了解到字符串在这里也不应该是一个问题…但是我没有专家,我可能会误解了。 问题答案: 返回所有找到的元素的列表,因此: 是一个列表(可能仅包含一个元素)。根据你的确切要求,你应该执行以下操作: 或使用仅返回一个(

    • 问题内容: 我没有使用python,BeautifulSoup,Selenium等的经验,但是我很想从网站上抓取数据并将其存储为csv文件。我需要的单个数据样本编码如下(一行数据)。 我需要的输出是 我发现这些数据没有ID或类,但仍以通用文本形式出现在网站中。为此,我分别尝试使用BeautifulSoup和Python Selenium,在这两种方法中,我都陷入了无法提取的麻烦,因为我没有看到任何

    • 我有下面的代码来刮一个页面,https://www.hotukdeals.com 由于某种原因,这种方法起作用,在循环中刮取交易的价格一定的次数,然后停止工作。 程序输出: 从输出中可以看到,在前四行之后,属性为空,但元素中有文本。 有人知道这事吗?有什么想法或解决办法吗?

    • BeautifulSoup尝试(替换最后3行) 这不会输出任何东西--在这个页面上,找到一些标签(divs、spans等)可以工作,但另一些则不行。在本例中,它没有按照预期找到带有game_info的表。

    • 我对使用python有点陌生,我接到了一个任务,需要从表中抓取数据。我也不太懂html。我以前从来没有这样做过,花了几天时间研究各种刮桌子的方法。不幸的是,所有的例子都是一个看起来比我所处理的更简单的网页布局。我尝试了很多不同的方法,但没有一种方法允许我选择所需的表数据。 下面网页底部的“每日水位”选项卡下的表怎么刮? url=https://apps.wrd.state.or.us/apps/g

    • 我正在尝试刮网页,在那里我需要解码整个表到一个数据帧。我正为此使用漂亮的汤。在某些标记中,有一些标记没有任何文本。但这些值会显示在网页上的特定span标记中。 下面的代码对应于该网页, 但是,这个标记中显示的值是。我试着删掉它,但我收到的是空短信。 如何刮这个价值使用美丽的汤。 URL:https://en.tutiempo.net/climate/ws-432950.html 下面给出了我的用于