تراشیدن وب برای بهره برداری از اطلاعات موجود که در این مقاله با زبان پایتون (در رشته مقاله ای جداگانه با تکنولوژی NodeJS نیز به web scraping خواهیم پرداخت) به دو گام از پنج گام آن می پردازیم.
در دو مقاله مجزا مستندات هر دو کتابخانه Requests و Beautiful Soup بررسی خواهیم کرد.
ابتدا اقدام به نصب آن کنید.
pip install requests
سپس در پروژه ایمپورت میکنیم.
آشنایی با دستورات کتابخانه
1-get
با این دستور صفحه مورد نظر را فقط با دادن لینک آن دریافت می کنیم.
res = requests.get(''https://webplant.ir/)
در جواب Status Code را دریافت میکنیم که درصورتی که برابر با 200 باشد به این معنی است که صفحه با موفقیت دریافت شده.
2-status_code
با دستور زیر میشه وضعیت درافت رو دوباره چک کرد
res.status_code
3-text
با این دستور میتونیم سورس و اطلاعات صفحه ای که دریفات کرده ایم را ببینیم ، البته این کار توصیه نمیشه چون صفحه ای که اطلاعات آن را دریفات کرده ایم حاوب تعدادی زیادی از خطوط HTML ، اطلاعات میان تگ های HTML ، ایمپورت های CSS , JavaScript و غیره میباشد که برای مشاهده آن ها بهتر است اول اطلاعات واکشی و در قالب دیتا بیس یا فایل اکسل ذخیره شده سپس مشاهده شود)
res.text
برای انتخاب و تجزیه دیتا از تگ های HTML از این لایبراری استفاده می کنیم
برای نصب کافیه دستور زیر رو اجرا کنید
pip install beautifulsoup4
خب برای استفاده از BeautifulSoup طبق خط زیر اون رو از bs4 ایمپورت میکنیم.
from bs4 import BeautifulSoup
بعد از ایمپورت کردن BeautifulSoup به شکل زیر محتوایی که با کتابخانه requests دریفات کرده ایم را به آن میدهیم
soup = BeautifulSoup( req.text, 'html.parser' )
با نوشتن 'html.parser' به BeautifulSoup میگیم که محتوای ما بصورت HTML است که میخاهیم آن را تجزیه کنی.
1-find
با این دستور میتونیم تگ مورد نظر رو انتخاب کنیم که اولین مورد یافت شده رو برامون برمی گرداند.
soup.find( 'a' )
یا به شکل زیر تگ و کلاس CSS مورد نظر رو پیدا کنیم
soup.find( 'section' , attrs={ 'class' : 'bg-with' } )
اولین تگ a موجود را بر می گرداند
یا میتونیم به شکل زیر و به ترتیب تگ ها رو انتخاب کنیم
soup.body.section.a
2-find_all()
این متد همه موارد یافت شده رو بر میگرداند.
soup.find_all( 'section' , attrs={ 'class' : 'bg-danger' } )
3-text
با این دستور میتونیم محتوام بین باز و بسته شدن تگ را دریافت کنیم.
soup.find( 'section' , attrs={ 'class' : 'bg-warning' } ).text
<div class="bg-warning">
Hi My Name is Hossein
<d/iv>
نتیجه میشه ( Hi My Name is Hossein )
خب حالا که لیستی از موارد رو با find_all بدست اوردیم میتونیم به روش زیر روش حلقه بزنیم
list =soup.find_all( 'section' , attrs={ 'class' : 'bg-warning' } )
for i in list:
print( i.text )