استفاده از AngleSharp در PowerShell 7 برای تجزیه و تحلیل صفحات وب – CloudSavvy IT


AngleSharp یک کتابخانه NET است که تجزیه و تحلیل و کار با محتوای HTML را سریع و آسان می کند. از آنجا که AngleSharp با دات نت نوشته شده است ، می توانید از خروجی در PowerShell نیز استفاده کرده و مصرف کنید. ترکیب این دو به شما امکان نوشتن سریع و آسان محتوای HTML را می دهد. در این مقاله ، ما نحوه تنظیم AngleSharp و استفاده از صفحه زمان برای تبدیل داده ها به یک شی PowerShell را بررسی خواهیم کرد.

AngleSharp را نصب و بارگیری کنید

نصب AngleSharp با آسان است Install-Package تیم شما حتی می توانید بسته را در نصب کنید CurrentUser دامنه ، به این معنی که برای استفاده از این کتابخانه به حقوق مدیر احتیاج ندارید. بسته موجود است NuGet کتابخانه

Install-Package 'AngleSharp' -Scope 'CurrentUser' -Source 'Nuget'

سپس می خواهیم AngleSharp را برای استفاده در اسکریپت PowerShell بارگیری کنیم. برای این منظور ما می خواهیم استفاده کنیم Add-Type cmdlet برای بارگیری مستقیم DLL برای کتابخانه. در زیر کدی آورده شده است که به شما کمک می کند جدیدترین نسخه .NET را پیدا کرده و این بار را بارگیری کنید اگر کتابخانه از قبل در جلسه شما بارگیری نشده است.

If ( -Not ([System.Management.Automation.PSTypeName]'AngleSharp.Parser.Html.HtmlParser').Type ) {
    $standardAssemblyFullPath = (Get-ChildItem -Filter '*.dll' -Recurse (Split-Path (Get-Package -Name 'AngleSharp').Source)).FullName | Where-Object {$_ -Like "*standard*"} | Select-Object -Last 1

    Add-Type -Path $standardAssemblyFullPath -ErrorAction 'SilentlyContinue'
} # Terminate If - Not Loaded

برای اطلاع از چگونگی تجزیه و تحلیل محتوای صفحه وب و ایجاد یک شی object مفید PowerShell ، به ادامه مطلب بروید!

تجزیه و تحلیل یک صفحه وب

البته ، کل هدف این است که در واقع تجزیه و تحلیل یک صفحه وب. در این مثال ، ما محتوا را از بارگیری می کنیم Invoke-WebRequest و سپس با استفاده از نتیجه ، محتوا را در AngleSharp تجزیه و تحلیل کنید. ما برای جمع آوری داده های آب و هوا و تبدیل آنها به یک جسم ، از پیش بینی محلی 7 روزه سرویس ملی هواشناسی استفاده خواهیم کرد. ابتدا ، اجازه دهید داده های آب و هوا را استخراج کنیم.

$Request = Invoke-WebRequest -Uri "<https://forecast.weather.gov/MapClick.php?lat=40.48675500000007&lon=-88.99177999999995>"

داده های سایتی که ما به آن علاقه داریم Content خاصیت ، اما این منبع کامل HTML است ، که پردازش آن بسیار زیاد است. برای یافتن قسمت منبع HTML که می خواهیم استفاده کنیم (F12 در Chrome برای سایتی که می خواهید بررسی کنید) اغلب استفاده از ابزارهای توسعه دهنده Chrome ساده ترین کار است.

ساختار HTML صفحه زمان NWS.

خوشبختانه وجود دارد div ظرفی با یک لیست نامرتب که می توانیم آن را تجزیه و تحلیل کنیم. مرحله بعدی بارگذاری محتوای استخراج شده در AngleSharp است.

$Parser = New-Object AngleSharp.Html.Parser.HtmlParser
$Parsed = $Parser.ParseDocument($Request.Content)

اکنون که ما محتوای تجزیه و تحلیل شده را در دسترس داریم $Parsed متغیر ، ما می توانیم این داده ها را دستکاری کنیم تا فقط به بخشی که می خواهیم برسیم. به راحتی ، سایت NWS شناسه ای را فقط برای این لیست نام مرتب ارائه می دهد seven-day-forecast-list. از آنجا که هر شناسه در یک صفحه HTML منحصر به فرد است ، بنابراین هدف قرارگیری لیست آسان می کند. استفاده كردن All از محتوای تجزیه و تحلیل شده ما ، فقط می توانیم شی with را با شناسه seven-day-forecast-list.

$ForecastList = $Parsed.All | Where-Object ID -EQ 'seven-day-forecast-list'

این ویژگی های مختلفی را در پی خواهد داشت ، اما ما بر روی این موارد تمرکز کرده ایم ChildNodes ملک چون همه را در بر خواهد گرفت li حاوی داده های مورد نیاز ما. برای دریافت ایده ای از آنچه می خواهیم به سایت خود هدایت کنیم ، اجازه دهید یک فرد را بررسی کنیم li. چندین عنصر با کلاس وجود دارد که می توانیم روی آنها تمرکز کنیم.

  • period-name – مدت زمان نسبی.
  • short-desc – شرح مختصر زمان.
  • temp temp-high – دمای بالا

ساختار HTML یک عنصر ظرف سنگ قبر.

ممکن است متوجه شوید img برچسب حاوی alt املاک با بسیاری از اطلاعات مفید. پیدا کردن کلاسی که در آن ذخیره شده بسیار آسان است classname خاصیت گره کودک. به هدف alt عنصر ، ما باید به روش کمی متفاوت اعتماد کنیم ، QuerySelectorAll که از انتخابگرهای سنتی CSS برای تسهیل هدف گیری پیچیده استفاده می کند.

$ForecastList.ChildNodes | ForEach-Object {
	# Retrieve just the content of the tombstone-container div underneath the forecast-tombstone li element.
  $Node = $_.ChildNodes | Where-Object ClassName -EQ 'tombstone-container'

  [PSCustomObject]@{
		# Search the child nodes under the tombstone-container and find the element named period-name. Retrieve just the innerHTML which is the text value. This includes a break element, <br> of which we don't need, so replace that with a space instead.
    "Period" = $Node.ChildNodes.Where({ $_.ClassName -EQ 'period-name'}).InnerHTML -Replace "<br>"," "
    "Temp"   = $Node.ChildNodes.Where({ $_.ClassName -Match 'temp'}).InnerHTML
    "Short"  = $Node.ChildNodes.Where({ $_.ClassName -EQ 'short-desc'}).InnerHTML -Replace "<br>"," "
		# Since we don't have a class to target, on the root node, use the CSS selector p > img which looks for a p element with a child img element. Next, use the Attributes property to find the one named alt and return it's value.
    "Alt"    = $Node.QuerySelectorAll("p > img").Attributes.Where({$_.Name -EQ 'alt'}).Value
  }
}

از صفحه وب آنالیز شده از AngleSharp خارج شوید.

اگرچه برای رسیدن به عناصری که می خواهیم در آخر لازم است چند عنصر را تکرار کنیم ، اما می توانیم ساختار سند HTML را مرور کرده و دقیقاً همان چیزی را که نیاز داریم بدست آوریم. ممکن است درک ساختارها کمی مشکل باشد ، اما در نهایت کاری که AngleSharp انجام می دهد ایجاد اشیا برای هر عنصر DOM است. هنگامی که بهترین روش برای هدف قرار دادن موارد مورد نیاز را درک کردید ، بازیابی محتوا کار دشواری نیست.

نتیجه

AngleSharp یک رابط برنامه نویسی عالی برای تجزیه و تحلیل و تعامل با محتوای HTML در صفحات وب ارائه می دهد. این می تواند دریچه ای برای استفاده از PowerShell برای بازیابی محتوایی باشد که در غیر این صورت غیرقابل دسترسی است. دریافت این محتوا ، ذخیره سازی آن و استفاده از آن در اسکریپت ها بسیار مفید است و می تواند به روش های ادغام سیستم کمک کند!


منبع: khabar-mehman.ir

دیدگاهتان را بنویسید

Comment
Name*
Mail*
Website*