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

时间:2018-02-14 12:05:45

标签: python beautifulsoup

我一直在尝试使用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 个答案:

答案 0 :(得分:0)

  1. find()返回单个元素而不是列表。所以,你不能像这样迭代

    for rating in headline.find('div', {'class': 'Something'}):
        print(rating)
    
  2. 要获取title属性,您只需在汤对象上使用 ['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'
    
  3. 或者,更确切地说,您可以使用

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

    Read the docs了解有关如何获取属性的属性/内容的更多信息。

答案 1 :(得分:0)

如果要使用类title提取a元素,可以执行以下操作:

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)