2011-09-29 35 views
9

Bạn có biết tại sao ví dụ đầu tiên trong hướng dẫn của BeautifulSoup http://www.crummy.com/software/BeautifulSoup/documentation.html#QuickStart cho AttributeError: 'NavigableString' object has no attribute 'name' không? Theo số this answer các ký tự khoảng trắng trong HTML gây ra sự cố. Tôi đã thử với các nguồn của một vài trang và 1 làm việc những người khác đã cho cùng một lỗi (tôi loại bỏ không gian). Bạn có thể giải thích "tên" có đề cập đến không và tại sao lỗi này xảy ra? Cảm ơn.BeautifulSoup: AttributeError: đối tượng 'NavigableString' không có thuộc tính 'name'

Trả lời

13

name sẽ đề cập đến tên của thẻ nếu đối tượng là một Tag đối tượng (ví dụ: <html> name = "html")

nếu bạn có khoảng trống trong đánh dấu của bạn ở giữa các nút BeautifulSoup sẽ biến những thành NavigableString 'S. Vì vậy, nếu bạn sử dụng chỉ mục của contents để lấy các nút, bạn có thể lấy một NavigableString thay vì Tag tiếp theo.

Để tránh điều này, truy vấn cho nút bạn đang tìm kiếm: Searching the Parse Tree

hoặc nếu bạn biết tên của thẻ tiếp theo bạn muốn, bạn có thể sử dụng tên đó là tài sản và nó sẽ trở lại là người đầu tiên Tag với tên đó hoặc None nếu không có trẻ em nào có tên đó tồn tại: Using Tag Names as Members

Nếu bạn muốn sử dụng contents bạn phải kiểm tra các đối tượng bạn đang làm việc. Các lỗi mà bạn đang nhận được chỉ có nghĩa là bạn đang cố gắng truy cập vào các tài sản tên vì mã giả định đó là một Tag

5

Bạn có thể sử dụng cố gắng nắm bắt để loại bỏ các trường hợp khi chuỗi điều hướng đã được phân tích trong vòng lặp, như thế này:

for j in soup.find_all(...) 
     try: 
      print j.find(...) 
     except NavigableString: 
      pass 
3

chỉ cần bỏ qua NavigableString đối tượng trong khi lặp lại qua cây:

response = requests.get(url) 
soup = BeautifulSoup(response.text, 'html.parser') 

for body_child in soup.body.children: 
    if isinstance(body_child, NavigableString): 
     continue 
    if isinstance(body_child, Tag): 
     print(body_child.name) 
+1

.find_all() dường như chỉ trả lại thẻ con và bỏ qua các khoảng trắng ... –

Các vấn đề liên quan