اکوسیستم گسترده پایتون دارای تعداد بیشماری کتابخانه است که اسکراپینگ وب را به یک کار ساده تبدیل میکند و lxml مطمئناً یکی از انتخابهای برتر است. هدف این آموزش ارائه یک راهنمای جامع در مورد اینکه چرا lxml یک انتخاب عالی برای خراش دادن وب است، مراحل ساخت یک اسکراپر قوی lxml و مثالهای عملی برای شروع کار است. این آموزش همچنین بینش های ارزشمندی را برای اطمینان از حداکثر تعداد درخواست های موفقیت آمیز در حین خراش دادن وب گنجانده است.
مقدمه ای بر Web Scraping با lxml در پایتون
خراش دادن وب با استفاده از lxml پایتون شامل استخراج و ساختار داده ها از کدهای HTML یا XML دانلود شده است. برخلاف برخی از کتابخانه ها که هم دانلود و هم تجزیه را انجام می دهند، lxml در تجزیه تخصص دارد. برای دانلود صفحات وب، معمولاً از یک کلاینت HTTP مانند Requests استفاده می کنید. هنگامی که دادههای HTML یا XML دانلود شدند، lxml میتواند این دادهها را تجزیه کند و به شما این امکان را میدهد که به عناصر و ویژگیهای خاص به طور موثر دسترسی داشته باشید.
چرا lxml پایتون را برای اسکراپینگ وب انتخاب کنید؟
انتخاب lxml برای پروژه های اسکرپینگ وب شما دارای چندین مزیت است:
مزایای:
- توسعه پذیری: lxml که بر روی کتابخانه های C libxml2 و libxslt ساخته شده است، بسیار توسعه پذیر است و مزایای سرعت کتابخانه بومی C را همراه با سادگی پایتون ارائه می دهد.
- ساختار XML: از سه زبان طرحواره برای مشخص کردن ساختار XML پشتیبانی میکند و XPath را به طور کامل پیادهسازی میکند و آن را برای پیمایش عناصر در اسناد XML بسیار قدرتمند میکند.
- پیمایش داده ها: قابلیت عبور از ساختارهای XML و HTML مختلف، امکان پیمایش در میان کودکان، خواهران و برادران و سایر عناصر را دارد. این ویژگی به آن برتری نسبت به تجزیه کننده های دیگر مانند BeautifulSoup می دهد.
- بهره وری منابع: حافظه کمتری را در مقایسه با سایر کتابخانه ها مصرف می کند، که باعث می شود برای تجزیه مجموعه داده های بزرگ بسیار کارآمد باشد.
با این حال، lxml همیشه بهترین انتخاب برای تجزیه HTML ضعیف یا شکسته نیست. در چنین مواردی، می توانید به عنوان یک گزینه بازگشتی به BeautifulSoup متوسل شوید.
مراحل ساخت یک تجزیه کننده قوی lxml در پایتون
مرحله 1: ابزارهای مناسب را انتخاب کنید
قبل از شروع خراش دادن، باید مجموعه ابزار مناسبی را انتخاب کنید. برای مشتریان HTTP، پایتون کتابخانه هایی مانند Requests
, HTTPX
، و aiohttp
. اگر هدف شما یک وب سایت پویا است که به جاوا اسکریپت متکی است، ممکن است به یک مرورگر بدون هد مانند سلنیوم نیز نیاز داشته باشید.
مرحله 2: صفحه وب هدف خود را شناسایی کنید
پس از تنظیم ابزار خود، صفحه وب را که می خواهید خراش دهید شناسایی کنید. وب سایت را حتما بخوانید robots.txt
برای دانستن قوانین خراش دادن وب در آن سایت.
مرحله 3: دستورالعمل های Web Scraping را درک کنید
درک بهترین شیوه های خراش دادن وب و موانع احتمالی مانند CAPTCHA یا ممنوعیت IP بسیار مهم است. در مواردی که چنین مسائلی را پیشبینی میکنید، استفاده از یک سرور پراکسی چرخشی میتواند مفید باشد.
مرحله 4: تنظیم هدرها
هدرهای HTTP به تقلید از رفتار واقعی کاربر کمک می کند. اینها را به درستی تنظیم کنید تا مطمئن شوید که اسکراپر شما مسدود نمی شود.
اسکراپینگ وب با lxml پایتون: یک آموزش گام به گام
پیش نیازها
قبل از شروع، به موارد زیر نیاز دارید:
- پایتون 3.x: مطمئن شوید که Python 3.x روی سیستم شما نصب شده است. می توانید آن را از وب سایت رسمی پایتون.
- ویرایشگر کد: هر ویرایشگر متنی که از پایتون پشتیبانی میکند این کار را انجام میدهد، اگرچه IDEهای پیشرفته مانند Visual Studio Code، Notepad++ یا PyCharm میتوانند عملکردهای بیشتری مانند اشکالزدایی، برجستهسازی نحو و تکمیل خودکار ارائه دهند.
- درخواست ها و کتابخانه های lxml: اینها کتابخانه های پایتون شخص ثالثی هستند که به ترتیب برای درخواست های HTTP و تجزیه HTML استفاده می شوند. برای نصب، ترمینال خود را باز کرده و اجرا کنید:
pip install requests lxml
1. تنظیم محیط توسعه شما
توضیح:
در این مرحله محیط کدنویسی خود را برای توسعه آماده می کنید. مکانی را در رایانه خود انتخاب کنید که میخواهید اسکریپت خود را در آنجا ذخیره کنید.
- ساخت فایل پایتون: ویرایشگر کد خود را باز کنید و یک فایل پایتون جدید با نام ایجاد کنید
imdb_scraper.py
.
2. واکشی محتوای صفحه وب
کد:
import requests
url = "https://www.imdb.com/chart/moviemeter/"
response = requests.get(url)
if response.status_code == 200:
page_content = response.text
else:
print("Failed to retrieve the page")
توضیح:
در این بخش، محتوای HTML محبوب ترین صفحه فیلم های IMDb را واکشی می کنید.
- واردات
requests
:requests
کتابخانه برای ایجاد درخواست های HTTP استفاده می شود. - واکشی محتوا:
requests.get(url)
محتوای صفحه وب را واکشی می کند و در آن ذخیره می کندresponse
متغیر. - بررسی کد وضعیت: این یک تمرین خوب است که کد وضعیت HTTP را بررسی کنید (200 به معنای تأیید است). اگر 200 نباشد، واکشی صفحه مشکل دارد.
3. تجزیه صفحه وب
کد:
from lxml import html
tree = html.fromstring(page_content)
توضیح:
در اینجا شما محتوای HTML واکشی شده را به یک ساختار درختی قابل جستجو تبدیل می کنید.
- واردات
lxml.html
: این ماژول به ایجاد ساختار درختی از محتوای HTML کمک می کند. - ایجاد ساختار درختی:
html.fromstring(page_content)
محتوای HTML ذخیره شده در آن را تجزیه می کندpage_content
و یک ساختار درخت مانند ایجاد می کند که در متغیر ذخیره می کنیدtree
.
4. استخراج داده ها
کد:
movie_titles = tree.xpath('//td[@class="titleColumn"]/a/text()')
imdb_ratings = tree.xpath('//td[@class="imdbRating"]/strong/text()')
توضیح:
اکنون که یک ساختار درخت مانند از صفحه وب دارید، می توانید داده ها را از آن جستجو و استخراج کنید.
- با استفاده از XPath: XPath یک زبان پرس و جو است که می تواند در یک سند XML حرکت کند. در اینجا از آن برای تعیین عناصر و ویژگی هایی که می خواهید خراش دهید استفاده می کنید.
- استخراج عناوین و رتبه بندی ها: شما عناوین فیلم و رتبه بندی های IMDb را با استفاده از پرس و جوهای XPath جمع آوری می کنید که مکان آنها را در ساختار HTML مشخص می کند.
5. ذخیره سازی داده ها
کد:
for title, rating in zip(movie_titles, imdb_ratings):
print(f"Movie: {title}, Rating: {rating}")
توضیح:
در نهایت، شما می خواهید داده های خراشیده شده را ذخیره یا نمایش دهید.
- لیست های فشرده:
zip
تابع هر عنوان فیلم را با رتبه بندی مربوطه جفت می کند. - چاپ داده ها: در این مثال، ما به سادگی هر جفت را چاپ می کنیم. در یک برنامه دنیای واقعی، ممکن است بخواهید این داده ها را در یک پایگاه داده یا یک فایل ذخیره کنید.
نمونه کد کامل
# Importing required libraries
import requests
from lxml import html
# Step 2: Fetch Web Page Content
url = "https://www.imdb.com/chart/moviemeter/"
response = requests.get(url)
if response.status_code == 200:
page_content = response.text
else:
print("Failed to retrieve the page")
# Step 3: Parse the Web Page
tree = html.fromstring(page_content)
# Step 4: Extract Data
movie_titles = tree.xpath('//td[@class="titleColumn"]/a/text()')
imdb_ratings = tree.xpath('//td[@class="imdbRating"]/strong/text()')
# Step 5: Store and/or Output Data
for title, rating in zip(movie_titles, imdb_ratings):
print(f"Movie: {title}, Rating: {rating}")
با دنبال کردن این آموزش گسترده و دقیق، باید بتوانید با اطمینان اطلاعاتی درباره محبوب ترین فیلم ها از IMDb به دست آورید. مثل همیشه، احترام به شرایط خدمات هر وب سایتی که در حال انجام آن هستید بسیار مهم است.
اظهارات پایانی
خراش دادن وب می تواند یک فرآیند پیچیده باشد، اما کتابخانه lxml پایتون بسیاری از پیچیدگی ها را ساده می کند. با ابزارهای مناسب، دانش بهترین شیوه ها و یک استراتژی کاملاً تعریف شده، می توانید تلاش های اسکراپینگ وب خود را کارآمد و موفق کنید. هدف این آموزش پوشش کامل این جنبه ها بود. خراشیدن مبارک!