'str' object has no attribute 'p'

2019-09-06 15:08发布

问题:

I have been following a tutorial on using BeautifulSoup, however when I try to read the title or even paragraphs (using soup.p) I get an error saying, "Traceback (most recent call last): File "*****/Tutorial1.py", line 9, in pTag = soup.p AttributeError: 'str' object has no attribute 'p'"

I am still very new to Python, sorry to bother if these is too much of an easy issue but I will greatly appreciate any help. Code given below:

import urllib.request
from bs4 import BeautifulSoup


with urllib.request.urlopen('http://www.bbc.co.uk/sport/0/netball/33717953')    as response:
    page = response.read()
    soup = BeautifulSoup(page, "html5lib")
    soup = soup.prettify()
    pTag = soup.p

    print(pTag)

回答1:

Quoting Beautiful Soup Documentation

The prettify() method will turn a Beautiful Soup parse tree into a nicely formatted Unicode string, with each HTML/XML tag on its own line.

You set an string to soup var here: soup = soup.prettify(). Of course a string has not p property, then crashes.

To find all ps:

...
page = response.read()
soup = BeautifulSoup(page, "html5lib")
for paragraph in soup.find_all('p'):
    do_something_with(paragraph)