2015-01-10 14 views
5

Tôi đã nghiên cứu câu hỏi này nhưng chưa thấy giải pháp thực tế để giải quyết vấn đề này. Tôi đang sử dụng BeautifulSoup với Python và những gì tôi đang tìm kiếm là lấy tất cả các thẻ hình ảnh từ một trang, lặp qua từng trang và kiểm tra từng xem liệu đó có phải là thẻ mẹ trực tiếp hay không.Nhận thẻ cha mẹ ngay lập tức với BeautifulSoup bằng Python

Dưới đây là một số mã giả:

html = BeautifulSoup(responseHtml) 

for image in html.findAll('img'): 
    if (image.parent.name == 'a'): 
     image.hasParent = image.parent.link 

Bất kỳ ý tưởng về điều này?

+1

Những tài liệu này ngụ ý rằng mã giả của bạn khá chính xác: http://www.crummy.com/software/BeautifulSoup/bs4/doc/#parent – Ben

Trả lời

5

Bạn cần phải kiểm tra parent 's name:

for img in soup.find_all('img'): 
    if img.parent.name == 'a': 
     print "Parent is a link" 

Demo:

>>> from bs4 import BeautifulSoup 
>>> 
>>> data = """ 
... <body> 
...  <a href="google.com"><img src="image.png"/></a> 
... </body> 
... """ 
>>> soup = BeautifulSoup(data) 
>>> img = soup.img 
>>> 
>>> img.parent.name 
a 

Bạn cũng có thể lấy img thẻ mà có một a mẹ trực tiếp sử dụng một CSS selector:

soup.select('a > img') 
+0

Cảm ơn sự trợ giúp! Bằng cách sử dụng 'img.parent.name', đó sẽ luôn là cha mẹ ngay lập tức cho dù có quyền gì? – stwhite

+1

@stwhite chính xác, vui vì nó đã giúp ích. – alecxe

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