انواع اشیا beautiful soup
انواع اشیا beautiful soup
در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش انواع اشیا beautiful soup خواهیم پرداخت.
پیشنهاد ویژه : پکیج آموزش طراحی وب سایت با پایتون و جنگو
هنگامی که ما یک سند یا رشته html را به یک سازنده beautifulsoup منتقل کردیم ، beautifulsoup اساساً یک صفحه html پیچیده را به اشیا (objects) مختلف پایتون تبدیل می کند. در زیر قصد داریم چهار نوع اصلی از اشیا را مورد بحث قرار دهیم:
- Tag
- NavigableString
- BeautifulSoup
- Comments
اشیا تگ
از یک HTML برای تعریف انواع مختلف محتوا استفاده می شود. یک شی تگ در BeautifulSoup مربوط به یک تگ HTML یا XML در صفحه یا سند واقعی است.
1 2 3 4 5 |
>>> from bs4 import BeautifulSoup >>> soup = BeautifulSoup('<b class="boldest">TutorialsPoint</b>') >>> tag = soup.html >>> type(tag) <class 'bs4.element.Tag'> |
تگ ها حاوی ویژگی ها و روش های زیادی هستند و دو ویژگی مهم یک تگ نام و ویژگی های آن است.
نام (tag.name)
هر تگ دارای یک نام است و از طریق “.name” به عنوان پسوند قابل دسترسی است. tag.name نوع تگ موجود را برمی گرداند.
1 2 |
>>> tag.name 'html' |
با این حال، اگر نام تگ را تغییر دهیم ، همان مورد در نشانه گذاری HTML تولید شده توسط BeautifulSoup منعکس خواهد شد.
1 2 3 4 5 |
>>> tag.name = "Strong" >>> tag <Strong><body><b class="boldest">TutorialsPoint</b></body></Strong> >>> tag.name 'Strong' |
ویژگی ها (tag.attrs)
یک شی تگ می تواند هر تعداد ویژگی داشته باشد. تگ <b class = “boldest”> ویژگی “class” دارد که مقدار آن “boldest” است. هر چیزی که تگ نباشد، در اصل یک ویژگی است و باید حاوی یک مقدار باشد. می توانید از طریق دسترسی به کلیدها (مانند دسترسی به “کلاس” در مثال بالا) یا دسترسی مستقیم از طریق “.attrs” به ویژگی ها دسترسی پیدا کنید.
1 2 3 4 |
>>> tutorialsP = BeautifulSoup("<div class='tutorialsP'></div>",'lxml') >>> tag2 = tutorialsP.div >>> tag2['class'] ['tutorialsP'] |
ما می توانیم همه نوع اصلاحات را در ویژگی های تگ خود انجام دهیم (افزودن / حذف / اصلاح).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
>>> tag2['class'] = 'Online-Learning' >>> tag2['style'] = '2007' >>> >>> tag2 <div class="Online-Learning" style="2007"></div> >>> del tag2['style'] >>> tag2 <div class="Online-Learning"></div> >>> del tag['class'] >>> tag <b SecondAttribute="2">TutorialsPoint</b> >>> >>> del tag['SecondAttribute'] >>> tag </b> >>> tag2['class'] 'Online-Learning' >>> tag2['style'] KeyError: 'style' |
ویژگی های چند مقداری
برخی از ویژگی های HTML5 می توانند مقادیر متعددی داشته باشند. معمولاً از ویژگی کلاس استفاده می شود که می تواند چندین مقدار CSS داشته باشد. سایر موارد شامل “rel” ، “rev” ، “headers” ، “accesskey” و “accept-charset” است. ویژگی های چند مقداذی در BeautifulSoup به صورت لیست نشان داده شده است.
1 2 3 4 5 6 7 8 9 |
>>> from bs4 import BeautifulSoup >>> >>> css_soup = BeautifulSoup('<p class="body"></p>') >>> css_soup.p['class'] ['body'] >>> >>> css_soup = BeautifulSoup('<p class="body bold"></p>') >>> css_soup.p['class'] ['body', 'bold'] |
با این حال، اگر هر ویژگی حاوی بیش از یک مقدار باشد اما در هر نسخه استاندارد HTML ویژگی چند مقداری نباشد، BeautifulSoup ویژگی را تنها می گذارد –
1 2 3 4 5 |
>>> id_soup = BeautifulSoup('<p id="body bold"></p>') >>> id_soup.p['id'] 'body bold' >>> type(id_soup.p['id']) <class 'str'> |
اگر یک تگ را به یک رشته تبدیل کنید، می توانید مقادیر چند ویژگی را تلفیق کنید.
1 2 3 4 5 6 7 8 |
You can consolidate multiple attribute values if you turn a tag to a string. >>> rel_soup = BeautifulSoup("<p> tutorialspoint Main <a rel='Index'> Page</a></p>") >>> rel_soup.a['rel'] ['Index'] >>> rel_soup.a['rel'] = ['Index', ' Online Library, Its all Free'] >>> print(rel_soup.p) <p> tutorialspoint Main <a rel="Index Online Library, Its all Free"> Page</a></p> |
با استفاده از ‘get_attribute_list’ ، مقداری دریافت می کنید که همیشه یک لیست باشد، رشته ای، صرف نظر از اینکه چند مقدار دارد یا نه.
1 |
id_soup.p.get_attribute_list(‘id’) |
با این حال، اگر سند را به عنوان “xml” تجزیه کنید، هیچ ویژگی چند مقداری وجود ندارد –
1 2 3 |
>>> xml_soup = BeautifulSoup('<p class="body bold"></p>', 'xml') >>> xml_soup.p['class'] 'body bold' |
رشته قابل جستجو (navigablestring)
شی navigablestring برای نشان دادن محتویات یک تگ استفاده می شود. برای دسترسی به مطالب، از “.string” همراه با تگ استفاده کنید.
1 2 3 4 5 6 7 |
>>> from bs4 import BeautifulSoup >>> soup = BeautifulSoup("<h2 id='message'>Hello, Tutorialspoint!</h2>") >>> >>> soup.string 'Hello, Tutorialspoint!' >>> type(soup.string) > |
می توانید رشته را با رشته دیگری جایگزین کنید اما نمی توانید رشته موجود را ویرایش کنید.
1 2 3 4 5 6 7 |
>>> soup = BeautifulSoup("<h2 id='message'>Hello, Tutorialspoint!</h2>") >>> soup.string.replace_with("Online Learning!") 'Hello, Tutorialspoint!' >>> soup.string 'Online Learning!' >>> soup <html><body><h2 id="message">Online Learning!</h2></body></html> |
BeautifulSoup
BeautifulSoup شیئی است که وقتی می خواهیم یک منبع را وب اسکراپینگ کنیم ایجاد شده است. بنابراین، این سند کاملی است که ما سعی در اسکراپینگ آن داریم.
1 2 3 4 5 6 |
>>> from bs4 import BeautifulSoup >>> soup = BeautifulSoup("<h2 id='message'>Hello, Tutorialspoint!</h2>") >>> type(soup) <class 'bs4.BeautifulSoup'> >>> soup.name '[document]' |
کامنت ها
شی comment بخشی از نظر سند وب را نشان می دهد. این فقط یک نوع خاص از NavigableString است.
1 2 3 4 5 6 7 8 9 10 |
>>> soup = BeautifulSoup('<p><!-- Everything inside it is COMMENTS --></p>') >>> comment = soup.p.string >>> type(comment) <class 'bs4.element.Comment'> >>> type(comment) <class 'bs4.element.Comment'> >>> print(soup.p.prettify()) <p> <!-- Everything inside it is COMMENTS --> </p> |
اشیا NavigableString
اشیا NavigableString برای نشان دادن متن در تگ ها استفاده می شوند.
دیدگاه شما