تو شکل زیر پایتون از یه طرف و از اسکرپر(خزنده) هم از طرف دیگه داره دیده میشه. و بیچاره صفحه وب که باید این وسط این دو موجود رو تحمل کنه 😂. خب تا حدودی مشخصه که میخوایم چیکار کنیم:
ابتدا کتابخانه مربوطه را نصب میکنیم: (این کتابخونه رو یه ایرانی به نام علیرضا نوشته و دمش گرم:) )
!pip install autoscraper
from autoscraper import AutoScraper
حالا یه لینک معرفی میکنیم و یه نمونه بهش میدیم. نمونه داده شده ، تعیین میکنه که ما دنبال چی هستیم:
url_stack='https://stackoverflow.com/questions/2081586/web-scraping-with-python'
wanted_list=["What are metaclasses in Python?"]
توی مرحله بعد ماشه رو میچکونیم 🔫 و نتیجه رو مشاهده میکنیم:
scraper=AutoScraper()
result=scraper.build(url_stack,wanted_list)
print(result)
کاری که کردیم این بود که متن یکی از لینک های کنار صفحه url رو به این کتابخونه دادیم و اون هم رفت و تمام موارد مشابه رو برامون پیدا کرد. توی شکل زیر مشخصه. ما متن لینک اول رو بهش دادیم و اون رفت چند مورد بعدی رو برامون پیدا کرد:

متود get_result_exact
این متود باعث میشود داده ها دقیقا بر اساس ترتیب wanted_list سورت شوند.
همچنین کد زیر باعث میشود، لینک های مشابه موارد ذکر شده در wanted list برای ما فهرست شود:
from autoscraper import AutoScraper
url = 'https://github.com/alirezamika/autoscraper'
wanted_list = ['A Smart, Automatic, Fast and Lightweight Web Scraper for Python', '5k', 'https://github.com/alirezamika/autoscraper/issues']
scraper = AutoScraper()
scraper.build(url, wanted_list)
نتیجه:

برای مثال در شکل زیر مشخص شده است که ما issues را داده ایم و الگوریتم برای ما سایر موارد مشابه را نیز پیدا کرده است:

ذخیره و لود کردن:
با متد زیر میتوان دیتا را ذخیره یا لود کرد:
scraper.save(r'C:\Users\Shahram\Desktop')
scraper.load('yahoo-finance')
Grouping results and removing unwanted ones
در کد زیر صفحه ای از سایت دیوار scrap شده که مربوط به مشاغل است. که در دو حالت از آن خروجی گرفته ایم. حالت exact که دقیقا خود عبارت پیدا شده است و حالت similar که موارد مشابه ، یعنی تمام عناوین آگهی شغلی پیدا شده است: (عالیه 🍌)
url='https://divar.ir/s/tehran/jobs'
wanted_list=['استخدام کارگر خدماتی']
similar=scraper.build(url, wanted_list)
exact= scraper.get_result_exact(url)
print(similar)
print('----')
print(exact)
نکته : تنها 21 مورد به ما داده میشود.
همچنین میتوانیم از متود استفادعه کنیم و پارامتر grouped را برابر True قرار دهیم .
url='https://divar.ir/s/tehran/jobs'
wanted_list=['مژه کار ناخن کار']
new_similar=scraper.get_result_similar(url,grouped=True)
new_similar
نتیجه را در شکل زیر میبینیم که تعدادی rule در آن قرار دارد:

همچنین میتوانیم از متودهای keep_rules
یا remove_rules
برای حذف قوانین استفاده کنیم. در واقع باید به خروجی ها نگاه کنیم و آن مورد که متناسب با نیاز ما است را انتخاب کنیم:
برای مثال:
scraper.keep_rules(['rule_sks3', 'rule_2ydq', 'rule_buhw'])
Building a scraper to work with multiple websites with incremental learning
با استفاده از متود update=True
میتوان تمام قوانین قبلی را نگاه داشت و قوانین جدید را به آن اضافه نمود. (چی بهتر از این). این مورد در زمانی استفاه میشود که بخواهیم چند سایت را به طور همزمان اسکرپ کنیم. (اطلاعات بیشتر: رجوع به رفرنس چهارم)
Fuzzy matching for html tag attributes
برخی از سایتها از tag های متفاوتی برای صفحات خود استفاده میکنند. در این مواقع میتوان از متد attr_fuzz_ratio استفاده کرد. (مثال)
Using regular expressions
همچنین میتوان از regex برای پیدا کردن مقادیر مورد نظر خود استفاده نمود:
wanted_list = [re.compile('Lorem ipsum.+est laborum')]
تمام شد 🦍