کتابخانه requests-html در پایتون
کتابخانه Requests-HTML یکی از ابزارهای قدرتمند در پایتون برای انجام عملیات وب اسکریپینگ (Web Scraping) و پردازش صفحات HTML است. این کتابخانه توسط Kenneth Reitz (خالق کتابخانه معروف requests) توسعه یافته و هدف آن، سادهسازی تعامل با صفحات وب از جمله دریافت دادهها، رندر صفحات جاوااسکریپتی و استخراج اطلاعات از ساختار DOM است.
ویژگیهای کلیدی کتابخانه Requests-HTML
- ارسال درخواستهای HTTP به صورت ساده و شبیه کتابخانه
requests. - توانایی رندر جاوااسکریپت با استفاده از موتور Chromium داخلی.
- استفاده از انتخابگرهای CSS برای استخراج دادهها از HTML.
- پشتیبانی از XPath برای جستجوی دقیقتر در ساختار سند HTML.
- قابلیت Session برای مدیریت کوکیها و هدرهای ثابت در درخواستهای مکرر.
نصب کتابخانه Requests-HTML
برای نصب این کتابخانه میتوانید از دستور زیر استفاده کنید:
pip install requests-html
پس از نصب، میتوانید آن را در پروژه پایتون خود ایمپورت کنید. توجه کنید که برای استفاده از قابلیت رندر جاوااسکریپت باید Chromium نیز نصب شود که کتابخانه به طور خودکار آن را دانلود میکند.
ارسال درخواست HTTP با Requests-HTML
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://example.com')
print(r.status_code)
print(r.html.text)
در این مثال، ابتدا یک HTMLSession ایجاد میکنیم. سپس با استفاده از متد get() درخواست HTTP ارسال میکنیم. خروجی شامل وضعیت پاسخ (مانند 200 برای موفقیت) و محتوای متنی صفحه HTML است.
توضیح:
HTMLSessionمشابهrequests.Sessionاست اما قابلیت پردازش HTML را نیز دارد.r.htmlیک شیء از نوعHTMLاست که امکاناتی برای جستجو و تحلیل صفحه فراهم میکند.
استخراج دادهها از HTML با انتخابگر CSS
title = r.html.find('h1', first=True)
print(title.text)
در این مثال، با استفاده از متد find() و انتخابگر h1، تگ عنوان صفحه را پیدا کرده و محتوای متنی آن را چاپ میکنیم. اگر چندین تگ مشابه وجود داشته باشد، با پارامتر first=True فقط اولین مورد انتخاب میشود.
نکته مهم:
در صورتی که بخواهید تمام عناصر را دریافت کنید، کافی است first=False را استفاده کرده و روی خروجی که لیستی از المانهاست حلقه بزنید.
titles = r.html.find('h2')
for t in titles:
print(t.text)
استفاده از XPath برای جستجوی دقیقتر
items = r.html.xpath('//div[@class="product"]/h3/text()')
print(items)
XPath یک زبان قدرتمند برای مسیریابی در ساختار XML/HTML است. در اینجا، تمام تگهای h3 که درون div با کلاس product هستند استخراج میشوند.
رندر صفحات جاوااسکریپت
یکی از ویژگیهای متمایز Requests-HTML، قابلیت رندر جاوااسکریپت است. این قابلیت برای صفحاتی که محتوای آنها توسط جاوااسکریپت تولید میشود (مانند SPAها) بسیار کاربردی است.
r = session.get('https://example.com/dynamic-content')
r.html.render(timeout=20)
content = r.html.html
print(content)
در این کد، با متد render() صفحه بهصورت کامل بارگذاری و اسکریپتهای جاوااسکریپتی اجرا میشوند. سپس میتوان به محتوای نهایی دسترسی داشت. پارامتر timeout حداکثر زمان انتظار برای اجرای جاوااسکریپت را مشخص میکند.
نکته امنیتی:
از رندر جاوااسکریپت فقط در صورت نیاز استفاده کنید زیرا ممکن است باعث افزایش زمان اجرا و مصرف منابع سیستم شود.
مدیریت سشنها (Session Management)
session = HTMLSession()
session.headers.update({'User-Agent': 'Mozilla/5.0'})
r1 = session.get('https://example.com/login')
r2 = session.get('https://example.com/dashboard')
در اینجا، با استفاده از session.headers.update() یک هدر ثابت برای تمام درخواستها تنظیم کردهایم. این قابلیت برای شبیهسازی مرورگر و دور زدن برخی محدودیتهای ضد ربات مفید است.
دانلود تصاویر با Requests-HTML
img = r.html.find('img', first=True)
img_url = img.attrs['src']
img_data = session.get(img_url).content
with open('image.jpg', 'wb') as f:
f.write(img_data)
در این مثال، ابتدا مسیر تصویر از ویژگی src استخراج شده و سپس محتوای آن بهصورت باینری ذخیره میشود. این روش برای جمعآوری دادههای رسانهای در وب اسکریپینگ بسیار مؤثر است.
مقایسه Requests و Requests-HTML
| ویژگی | Requests | Requests-HTML |
|---|---|---|
| ارسال درخواست HTTP | ✅ بله | ✅ بله |
| پردازش HTML | ❌ خیر | ✅ بله (با parser داخلی) |
| رندر جاوااسکریپت | ❌ خیر | ✅ بله |
| انتخابگر CSS | ❌ خیر | ✅ بله |
| XPath | ❌ خیر | ✅ بله |
بهترین شیوهها (Best Practices)
- از timeout در درخواستها استفاده کنید تا از هنگ کردن برنامه جلوگیری شود.
- در صورت نیاز زیاد به رندر جاوااسکریپت، از ابزارهایی مانند
PlaywrightیاSeleniumاستفاده کنید. - قبل از استخراج داده، مطمئن شوید که مجوز قانونی از وبسایت هدف دارید (مطابق فایل
robots.txt). - در صورت پردازش صفحات زیاد، از تاخیر بین درخواستها (
time.sleep()) برای جلوگیری از بلاک شدن IP استفاده کنید.
جمعبندی
کتابخانه Requests-HTML ابزاری جامع برای توسعهدهندگان پایتون است که نیاز به ترکیب قابلیتهای requests و BeautifulSoup دارند. این کتابخانه نهتنها ارسال درخواستهای HTTP را آسان میکند، بلکه امکان تحلیل و رندر کامل صفحات وب را نیز فراهم میسازد. با رعایت بهترین شیوههای امنیتی و بهینهسازی، میتوان از آن در پروژههای وبکاوی، دادهکاوی و اتوماسیون وب به شکل مؤثر استفاده کرد.
آیا این مطلب برای شما مفید بود ؟




