JohnPaul
JohnPaul

Reputation: 394

Python BeautifulSoup extracting text from result

I am trying to get the text from contents but when i try beautiful soup functions on the result variable it results in errors.

from bs4 import BeautifulSoup as bs
import requests

webpage = 'http://www.dictionary.com/browse/coypu'
r = requests.get(webpage)
page_text = r.text

soup = bs(page_text, 'html.parser')

result = soup.find_all('meta', attrs={'name':'description'})  

print (result.get['contents'])

I am trying to get the result to read;

"Coypu definition, a large, South American, aquatic rodent, Myocastor (or Myopotamus) coypus, yielding the fur nutria. See more."

Upvotes: 1

Views: 2673

Answers (3)

thebadguy
thebadguy

Reputation: 2140

you need not to use findall as only by using find you can get desired output'

from bs4 import BeautifulSoup as bs
import requests

webpage = 'http://www.dictionary.com/browse/coypu'
r = requests.get(webpage)
page_text = r.text

soup = bs(page_text, 'html.parser')

result = soup.find('meta', {'name':'description'})

print result.get('content')

it will print:

Coypu definition, a large, South American, aquatic rodent, Myocastor (or Myopotamus) coypus, yielding the fur nutria. See more.

Upvotes: 0

Padraic Cunningham
Padraic Cunningham

Reputation: 180522

When you only want the first or a single tag use find, find_all returns a list/resultSet:

result = soup.find('meta', attrs={'name':'description'})["contents"]

You can also use a css selector with select_one:

result = soup.select_one('meta[name=description]')["contents"]

Upvotes: 1

Nehal J Wani
Nehal J Wani

Reputation: 16639

soup.find_all() returns a list. Since in your case, it returns only one element in the list, you can do:

>>> type(result)
<class 'bs4.element.ResultSet'>
>>> type(result[0])
<class 'bs4.element.ResultSet'>
>>> result[0].get('content')
Coypu definition, a large, South American, aquatic rodent, Myocastor (or Myopotamus) coypus, yielding the fur nutria. See more.

Upvotes: 1

Related Questions