هنگامی که صفحات وب را خراب می کنید ، متداول ترین کار مورد نیاز شما برای استخراج داده ها از منبع HTML است. چندین کتابخانه برای دستیابی به این هدف وجود دارد ، مانند:
Beautifulsoup یک کتابخانه اسکراپ وب بسیار محبوب در بین برنامه نویسان پایتون است که یک شیء پایتون را بر اساس ساختار کد HTML می سازد و همچنین به خوبی به نشانه های بد می پردازد ، اما یک اشکال دارد: کند است.
LXML یک کتابخانه تجزیه کننده XML (که همچنین HTML را تجزیه می کند) با API فیثونی مبتنی بر ElementTree است.(LXML بخشی از کتابخانه استاندارد پایتون نیست.)
Scropy با مکانیسم خاص خود برای استخراج داده ها همراه است. آنها به عنوان انتخاب کننده خوانده می شوند زیرا بخش خاصی از سند HTML را که توسط XPath یا CSS عبارات مشخص شده اند ، "انتخاب" می کنند.
XPath زبانی برای انتخاب گره ها در اسناد XML است که می تواند با HTML نیز استفاده شود. CSS زبانی برای استفاده از سبک ها در اسناد HTML است. این انتخاب کنندگان را برای مرتبط کردن این سبک ها با عناصر خاص HTML تعریف می کند.
انتخاب کنندگان Scropy یک بسته بندی نازک در اطراف کتابخانه پارسل است. هدف از این بسته بندی فراهم کردن ادغام بهتر با اشیاء پاسخ Scrapy است.
پارل یک کتابخانه اسکریپت وب مستقل است که می تواند بدون استفاده از آن استفاده شود. از کتابخانه LXML در زیر کاپوت استفاده می کند و یک API آسان را در بالای API LXML پیاده سازی می کند. این بدان معناست که انتخاب کننده های Scropy از نظر سرعت و دقت در LXML بسیار مشابه هستند.
با استفاده از انتخاب کنندگان
ساخت انتخاب کنندگان ¶
اشیاء پاسخ یک نمونه انتخاب را در ویژگی. صفحه نمایش در معرض نمایش قرار می دهند:
پاسخ به پرس و جو با استفاده از XPath و CSS چنان متداول است که پاسخ ها شامل دو میانبر دیگر هستند: Response. xPath () و Response. css ():
انتخاب کننده های SCRAPY نمونه هایی از کلاس انتخابی هستند که با عبور از شیء TexTresponse یا نشانه گذاری به عنوان یک رشته (در استدلال متن) ساخته شده اند.
معمولاً نیازی به ساخت انتخاب کننده های SCRAPY به صورت دستی نیست: شیء پاسخ در تماس های عنکبوتی در دسترس است ، بنابراین در بیشتر موارد استفاده از Response. css () و Response. xPath () راحت تر است. با استفاده از پاسخ. لیست یا یکی از این میانبرها همچنین می توانید اطمینان حاصل کنید که بدن پاسخ فقط یک بار تجزیه می شود.
اما در صورت لزوم ، استفاده مستقیم از انتخاب کننده امکان پذیر است. ساخت از متن:
ساخت از پاسخ - htmlresponse یکی از زیر کلاسهای TexTresponse است:
Selector به طور خودکار بهترین قوانین تجزیه کننده (XML در مقابل HTML) را بر اساس نوع ورودی انتخاب می کند.
با استفاده از انتخاب کنندگان
برای توضیح نحوه استفاده از انتخاب کنندگان ، ما از پوسته Scropy (که آزمایش تعاملی را ارائه می دهد) و یک صفحه مثال واقع در سرور اسناد Scropy خواهیم کرد:
به خاطر کامل بودن ، کد HTML کامل آن است:
ابتدا ، اجازه دهید پوسته را باز کنیم:
سپس ، پس از بارهای پوسته ، پاسخ را به عنوان متغیر پوسته پاسخ در دسترس خواهید داشت ، و انتخاب کننده ضمیمه آن در ویژگی پاسخ.
از آنجا که ما با HTML سر و کار داریم ، انتخاب کننده به طور خودکار از یک تجزیه کننده HTML استفاده می کند.
بنابراین ، با نگاهی به کد HTML آن صفحه ، اجازه دهید یک XPath را برای انتخاب متن در داخل برچسب عنوان بسازیم:
برای استخراج داده های متنی ، باید با روش های انتخاب کننده . get () یا . getall () تماس بگیرید ، به شرح زیر:
. get () همیشه یک نتیجه واحد را برمی گرداند. اگر چندین مسابقه وجود داشته باشد ، محتوای مسابقه اول بازگردانده می شود. اگر هیچ مسابقه ای وجود نداشته باشد ، هیچ کدام بازگردانده نمی شوند.. GetAll () لیستی را با تمام نتایج برمی گرداند.
توجه کنید که انتخاب کنندگان CSS می توانند با استفاده از عناصر شبه CSS3 ، گره های متن یا ویژگی را انتخاب کنند:
همانطور که می بینید ، . xpath () و . css () روش های انتخابی را به عنوان لیست انتخابی باز می گردانند ، که لیستی از انتخاب کنندگان جدید است. این API را می توان برای انتخاب سریع داده های تو در تو استفاده کرد:
اگر می خواهید فقط اولین عنصر همسان را استخراج کنید ، می توانید با انتخاب کننده . get () (یا نام مستعار آن . extract_first () که معمولاً در نسخه های قبلی استفاده می شود تماس بگیرید):
اگر هیچ عنصری پیدا نشد ، هیچ کدام را برمی گرداند:
مقدار بازگشت پیش فرض را می توان به عنوان یک آرگومان ارائه داد که به جای هیچ یک از آنها استفاده می شود:
به جای استفاده از مثال'src 'xpath می توان از ویژگی های با استفاده از ویژگی های انتخاب کننده یک انتخاب پرسید:
به عنوان میانبر ، . Attrib نیز به طور مستقیم در لیست انتخاب موجود است. این ویژگی ها را برای اولین عنصر تطبیق باز می گرداند:
این بیشتر مفید است که فقط یک نتیجه واحد انتظار می رود ، به عنوان مثالهنگام انتخاب توسط شناسه ، یا انتخاب عناصر منحصر به فرد در یک صفحه وب:
اکنون می خواهیم URL پایه و برخی از لینک های تصویر را بدست آوریم:
برنامه های افزودنی به انتخاب کنندگان CSS
در هر استاندارد W3C ، انتخاب کنندگان CSS از انتخاب گره های متنی یا مقادیر ویژگی پشتیبانی نمی کنند. اما انتخاب این موارد در یک زمینه خراش وب بسیار ضروری است که Scropy (Parsel) یک زن و شوهر از عناصر شبه غیر استاندارد را پیاده سازی می کند:
برای انتخاب گره های متن ، از :: متن استفاده کنید
برای انتخاب مقادیر ویژگی ، از :: att (name) استفاده کنید که در آن نام نام ویژگی ای است که شما می خواهید
این عناصر شبه خاص هستند. آنها احتمالاً با سایر کتابخانه ها مانند LXML یا Pyquery همکاری نخواهند کرد.
عنوان :: متن گره های متن کودکان را از یک عنصر نوادگان انتخاب می کند:
*:: متن همه گره های متن فرزندان از زمینه انتخاب فعلی را انتخاب می کند:
Foo :: اگر عنصر FOO وجود داشته باشد ، هیچ نتیجه ای را برمی گرداند ، اما حاوی هیچ متن نیست (یعنی متن خالی است):
این به معنای . css ('foo :: text') است. دریافت () حتی اگر یک عنصر وجود داشته باشد ، نمی تواند بازگشت. اگر همیشه رشته ای می خواهید از Default = '' استفاده کنید:
A :: ATTR (HREF) ارزش ویژگی HREF پیوندهای فرزندان را انتخاب می کند:
شما نمی توانید این عناصر شبه را زنجیر کنید. اما در عمل چندان منطقی نخواهد بود: گره های متنی ویژگی هایی ندارند و مقادیر ویژگی در حال حاضر مقادیر رشته ای هستند و گره های کودکان ندارند.
انتخاب کنندگان لانه سازی
روش های انتخاب (. xpath () یا . css ()) لیستی از انتخاب کنندگان از یک نوع را برمی گرداند ، بنابراین می توانید روش های انتخاب را برای آن انتخاب کنندگان نیز فراخوانی کنید. در اینجا یک مثال وجود دارد:
انتخاب ویژگی های عنصر
روش های مختلفی برای به دست آوردن مقدار یک ویژگی وجود دارد. اول ، می توان از Syntax XPath استفاده کرد:
Xpath Syntax چند مزیت دارد: این یک ویژگی استاندارد XPATH است ، و ATTributes در سایر قسمت های بیان XPath می توان استفاده کرد - به عنوان مثال. می توان با مقدار ویژگی فیلتر کرد.
Scrapy همچنین یک برنامه افزودنی برای انتخاب کنندگان CSS (:: Attr)) فراهم می کند که به شما امکان می دهد مقادیر ویژگی را بدست آورید:
علاوه بر آن ، یک ویژگی . ATTRIB از انتخاب کننده وجود دارد. اگر ترجیح می دهید در کد پایتون ، بدون استفاده از XPaths یا پسوندهای CSS ، از آن استفاده کنید ، می توانید از آن استفاده کنید:
این ویژگی در انتخاب لیست نیز موجود است. این فرهنگ لغت را با ویژگی های یک عنصر تطبیق اول برمی گرداند. استفاده از انتخاب کننده هنگامی که انتظار می رود یک نتیجه واحد باشد (به عنوان مثال هنگام انتخاب توسط Element ID ، یا هنگام انتخاب یک عنصر منحصر به فرد در یک صفحه) راحت است:
. ATTRIB ویژگی یک لیست انتخاب خالی خالی است:
با استفاده از انتخاب کنندگان با عبارات منظم
انتخاب کننده همچنین دارای یک روش . re () برای استخراج داده ها با استفاده از عبارات منظم است. با این حال ، بر خلاف استفاده از . xpath () یا . css () ، . Re () لیستی از رشته ها را برمی گرداند. بنابراین شما نمی توانید تماس های تو در تو را انجام دهید . re ().
در اینجا مثالی برای استخراج نام تصویر از کد HTML در بالا استفاده شده است:
یک یاور اضافی اضافی وجود دارد . get () () (و نام مستعار آن . Extract_First ()) برای . re () ، به نام . re_first (). از آن برای استخراج فقط اولین رشته تطبیق استفاده کنید:
عصاره () و Extract_first ()
اگر شما یک کاربر طولانی مدت SCRAPY هستید ، احتمالاً با روش های انتخاب کننده . extract () و . extract_first () آشنا هستید. بسیاری از پست ها و آموزش های وبلاگ نیز از آنها استفاده می کنند. این روش ها هنوز توسط Scropy پشتیبانی می شوند ، هیچ برنامه ای برای کاهش آنها وجود ندارد.
با این حال ، اسناد استفاده از SCRAPY اکنون با استفاده از روش های . get () و . getall () نوشته شده است. ما احساس می کنیم که این روش های جدید منجر به یک کد مختصر تر و قابل خواندن می شود.
مثالهای زیر نشان می دهد که چگونه این روش ها به یکدیگر نقشه برداری می کنند.
SELECTORLIST. GET () همان selectorlist. extract_first () است:
SELECTORLIST. GETALL () همان selectorlist. extract () است:
Selector. get () همان Selector. extract () است:
برای قوام ، Selector. getAll () نیز وجود دارد که لیستی را برمی گرداند:
بنابراین ، تفاوت اصلی این است که خروجی روش های . get () و . getall () قابل پیش بینی تر است: . get () همیشه یک نتیجه واحد را برمی گرداند ، . getall () همیشه لیستی از تمام نتایج استخراج شده را برمی گرداند. با روش . extract () همیشه آشکار نبود اگر نتیجه یک لیست باشد یا خیر. برای به دست آوردن یک نتیجه واحد یا . extract () یا . extract_first () باید خوانده شود.
کار با Xpaths¶
در اینجا چند نکته وجود دارد که ممکن است به شما در استفاده از XPath با انتخاب کننده های SCRAPY کمک کند. اگر هنوز با XPath خیلی آشنا نیستید ، ممکن است بخواهید ابتدا به این آموزش XPath نگاهی بیندازید.
برخی از نکات براساس این پست از وبلاگ Zyte است.
کار با نسبی xpaths¶
به خاطر داشته باشید که اگر انتخاب کننده های لانه سازی را در حال لانه سازی هستید و از XPath استفاده می کنید که از آن شروع می شود / ، آن XPath برای سند مطلق خواهد بود و نسبت به انتخابی که از آن می نامید ، نیست.
به عنوان مثال ، فرض کنید می خواهید همه را استخراج کنید
عناصر داخل عناصر. اول ، شما همه عناصر را بدست می آورید:
در ابتدا ، شما ممکن است وسوسه شوید که از رویکرد زیر استفاده کنید ، که اشتباه است ، زیرا در واقع همه را استخراج می کند
عناصر از سند ، نه تنها آنهایی که در داخل عناصر قرار دارند:
این روش مناسب برای انجام آن است (توجه داشته باشید که پیشوند نقطه .//p xpath):
مورد مشترک دیگر استخراج همه مستقیم است
فرزندان:
برای اطلاعات بیشتر در مورد XPath های نسبی ، بخش مسیرهای مکان را در مشخصات XPath مشاهده کنید.
هنگام پرس و جو بر اساس کلاس ، استفاده از CSS¶ را در نظر بگیرید
از آنجا که یک عنصر می تواند شامل چندین کلاس CSS باشد ، راه XPath برای انتخاب عناصر توسط کلاس بسیار شفاف است:
اگر از @class = 'someclass' استفاده می کنید ممکن است در نهایت عناصر گمشده ای که کلاس های دیگری دارند ، در نهایت استفاده کنید ، و اگر فقط از (class ، "someclass") استفاده می کنید تا این کار را انجام دهید که ممکن است با عناصر بیشتری که می خواهید به پایان برسیداگر آنها نام کلاس دیگری داشته باشند که SomeClass رشته را به اشتراک می گذارد.
همانطور که معلوم است ، انتخاب کنندگان Scropy به شما امکان می دهند انتخاب کنندگان را زنجیر کنید ، بنابراین بیشتر اوقات می توانید با استفاده از CSS با کلاس انتخاب کنید و در صورت لزوم به XPath تغییر دهید:
این تمیزتر از استفاده از ترفند Verbose XPath است که در بالا نشان داده شده است. فقط به یاد داشته باشید که از آن استفاده کنید. در عبارات XPath که دنبال خواهد شد.
از تفاوت بین // گره [1] و (// گره) مراقبت کنید [1]
// Node [1] تمام گره هایی را که ابتدا تحت والدین مربوطه خود اتفاق می افتد انتخاب می کند.
(// گره) [1] تمام گره های موجود در سند را انتخاب می کند ، و سپس فقط اولین آنها را می گیرد.
استفاده از گره های متنی در یک شرایط
هنگامی که شما نیاز به استفاده از محتوای متن به عنوان آرگومان در یک عملکرد رشته XPath دارید ، از استفاده از .// متن () خودداری کنید و از آن استفاده کنید. بجای.
این امر به این دلیل است که بیان .// متن () مجموعه ای از عناصر متن را به دست می آورد-یک مجموعه گره. و هنگامی که یک مجموعه گره به یک رشته تبدیل می شود ، که هنگامی که به عنوان آرگومان به یک عملکرد رشته مانند حاوی () یا شروع می شود ، اتفاق می افتد ، فقط برای عنصر اول در متن نتیجه می گیرد.
تبدیل یک گره به رشته:
با این حال ، گره ای که به یک رشته تبدیل شده است ، متن خود را به علاوه همه فرزندان خود جمع می کند:
بنابراین ، با استفاده از متن .// متن () مجموعه ای در این مورد چیزی را انتخاب نمی کند:
اما با استفاده ازبه معنای گره ، کار می کند:
متغیرها در عبارات XPath ¶
XPATH به شما امکان می دهد متغیرهای خود را در عبارات XPath خود با استفاده از نحو مقداری متغیر ارجاع دهید. این تا حدودی شبیه به پرس و جوهای پارامتری یا بیانیه های آماده شده در دنیای SQL است که در آن شما برخی از استدلال ها را در سؤالات خود با متغیرهای مناسب جایگزین می کنید؟، که سپس با مقادیر منتقل شده با پرس و جو جایگزین می شوند.
در اینجا مثالی برای مطابقت با یک عنصر بر اساس مقدار ویژگی "ID" آن ، بدون کدگذاری سخت آن (که قبلاً نشان داده شده بود) آورده شده است:
در اینجا یک مثال دیگر ، برای یافتن ویژگی "شناسه" یک برچسب حاوی پنج کودک (در اینجا ما مقدار 5 را به عنوان یک عدد صحیح منتقل می کنیم):
همه منابع متغیر باید هنگام فراخوانی . xpath () دارای یک مقدار الزام آور باشند (در غیر این صورت شما یک ValueError دریافت خواهید کرد: خطای XPATH: استثنا). این کار با تصویب بسیاری از استدلال های نامگذاری شده در صورت لزوم انجام می شود.
پارل ، انتخاب کنندگان SCRAPY POWERING کتابخانه ، جزئیات و نمونه های بیشتری در مورد متغیرهای XPath دارد.
حذف فضای نام
هنگام برخورد با پروژه های خراش ، غالباً راحت است که از شر نام های نام در کنار هم خلاص شوید و فقط با نام عناصر کار کنید ، برای نوشتن xpath های ساده و راحت تر. برای آن می توانید از روش Selector. Remove_Namespaces () استفاده کنید.
بیایید مثالی را نشان دهیم که این موضوع را با FEED ATOM وبلاگ Python Insider نشان می دهد.
ابتدا پوسته را با URL که می خواهیم خراش دهیم باز می کنیم:
این نحوه شروع پرونده است:
می توانید چندین اعلامیه فضای نام از جمله "http://www.w3. org/2005/atom" را با استفاده از پیشوند "GD:" برای "http://schemas. google.com/g/2005" مشاهده کنید. واد
هنگامی که در پوسته هستیم می توانیم همه اشیاء را انتخاب کنیم و ببینیم که کار نمی کند (زیرا فضای نام Atom XML در حال انسداد آن گره ها است):
اما هنگامی که ما به روش انتخاب کننده . remove_namespaces () فراخوانی می کنیم ، به همه گره ها می توان مستقیماً با نام آنها دسترسی پیدا کرد:
اگر تعجب می کنید که چرا روش حذف فضای نام همیشه به جای اینکه بخواهید آن را به صورت دستی بنامیم ، همیشه به طور پیش فرض فراخوانی نمی شود ، این به دلیل دو دلیل است که به ترتیب اهمیت ، عبارتند از:
از بین بردن فضای نام نیاز به تکرار و اصلاح تمام گره های موجود در سند است ، که این یک عمل بسیار مناسب است که می تواند به طور پیش فرض برای کلیه اسناد خزیده شده توسط Scropy انجام دهد
در صورتی که برخی از اسامی عناصر بین فضای نام درگیری وجود داشته باشد ، ممکن است مواردی وجود داشته باشد که در واقع استفاده از نام های نام مورد نیاز باشد. این موارد بسیار نادر است.
با استفاده از پسوند exslt
انتخاب کنندگان SCRAPY که در بالای LXML ساخته شده اند ، از برخی از پسوندهای EXSLT پشتیبانی می کنند و با این مناطق از پیش ثبت شده برای استفاده در عبارات XPath همراه هستند:
عبارات با قاعده¶
به عنوان مثال ، عملکرد تست () می تواند کاملاً مفید باشد وقتی که XPath-with-with () یا حاوی () کافی نیست.
مثال انتخاب پیوندها در مورد لیست با یک ویژگی "کلاس" که با یک رقم به پایان می رسد:
کتابخانه C libxslt به طور طبیعی از عبارات منظم Exslt پشتیبانی نمی کند ، بنابراین اجرای LXML از قلاب به ماژول Re Python استفاده می کند. بنابراین ، با استفاده از توابع Regexp در عبارات XPath شما ممکن است یک مجازات عملکرد کوچک اضافه کند.
عملیات را تنظیم کنید
این موارد می تواند برای حذف قسمت هایی از یک درخت سند قبل از استخراج عناصر متنی مفید باشد.
به عنوان مثال استخراج میکروداتا (محتوای نمونه گرفته شده از https://schema. org/product) با گروه هایی از موارد scopes و موارد مربوطه:
در اینجا ما ابتدا بر روی عناصر AttemScope تکرار می کنیم ، و برای هر یک ، ما به دنبال همه عناصر ArticleProps هستیم و مواردی را که خودشان در داخل مورد دیگر هستند حذف می کنیم.
سایر برنامه های افزودنی XPath
انتخاب کننده های Scrapy همچنین یک عملکرد بسیار از دست رفته XPATH را ارائه می دهند که برای گره هایی که تمام کلاسهای HTML مشخص شده دارند ، درست است.
برای HTML زیر:
شما می توانید از آن مانند این استفاده کنید:
بنابراین XPath // P [Has-Class ("Foo" ، "Bar-Baz")] تقریباً معادل CSS P. FOO. BAR-BAZ است. لطفاً توجه داشته باشید که در بیشتر موارد کندتر است ، زیرا این یک عملکرد خالص پیکون است که برای هر گره مورد نظر فراخوانی می شود ، در حالی که جستجوی CSS به XPath ترجمه می شود و بنابراین کارآمدتر عمل می کند ، بنابراین کاربردهای آن از نظر عملکرد آن محدود استموقعیت هایی که به راحتی با انتخاب کننده CSS توصیف نمی شوند.
پارل همچنین اضافه کردن پسوندهای XPath خود را ساده می کند.
parsel. xpathfuncs. set_xpathfunc (fname ، func) [منبع]
یک تابع پسوند سفارشی را برای استفاده در عبارات XPath ثبت کنید.
عملکرد عملکرد ثبت شده در شناسه FNAME برای هر گره تطبیق فراخوانده می شود ، که از یک پارامتر متن و همچنین پارامترهای منتقل شده از بیان XPath مربوطه منتقل می شود.
اگر عملکردی وجود نداشته باشد ، عملکرد پسوند حذف می شود.
انتخاب کنندگان داخلی مرجع
اشیاء انتخاب کننده
نمونه ای از انتخاب کننده ، بسته بندی بیش از پاسخ برای انتخاب بخش های خاصی از محتوای آن است.
پاسخ یک HTMLRESPONSE یا یک شیء XMLResponse است که برای انتخاب و استخراج داده ها استفاده می شود.
متن برای مواردی که پاسخ در دسترس نیست ، یک رشته رمزگذاری شده Unicode یا UTF-8 است. استفاده از متن و پاسخ با هم رفتار نامشخص است.
نوع نوع انتخاب را تعریف می کند ، می تواند "HTML" ، "XML" یا هیچ کدام (پیش فرض) باشد.
اگر نوع دیگری نباشد ، انتخاب کننده به طور خودکار بهترین نوع را بر اساس نوع پاسخ انتخاب می کند (در زیر مشاهده کنید) ، یا پیش فرض "HTML" را در صورت استفاده از متن به همراه متن.
اگر نوع باشد و پاسخی منتقل شود ، نوع انتخاب کننده از نوع پاسخ به شرح زیر استنباط می شود:
"HTML" برای هر چیز دیگری
در غیر این صورت ، اگر نوع تنظیم شود ، نوع انتخاب اجباری خواهد شد و هیچ تشخیصی رخ نمی دهد.
XPath (پرس و جو: str ، namespaces: اختیاری [نقشه برداری [str ، str]] = هیچ ، ** kwargs) → انتخاب لیست [_selectortype] [منبع] ¶
گره هایی را پیدا کنید که مطابق با پرس و جو XPath باشد و نتیجه را به عنوان نمونه لیست انتخاب با همه عناصر مسطح برگردانید. عناصر لیست رابط انتخاب کننده را نیز پیاده سازی می کنند.
Query رشته ای است که شامل پرس و جو XPath برای اعمال است.
Namespaces یک پیشوند اختیاری است: Namespace-URI نقشه برداری (DICT) برای پیشوندهای اضافی برای کسانی که در Register_Namespace ثبت شده اند (پیشوند ، URI). برخلاف Register_Namespace () ، این پیشوندها برای تماس های آینده ذخیره نمی شوند.
هر آرگومان نامگذاری شده اضافی را می توان برای انتقال مقادیر برای متغیرهای XPath در بیان XPath ، به عنوان مثال: به عنوان مثال: استفاده کرد.
برای راحتی ، این روش را می توان به عنوان پاسخ. xpath () نامید
انتخاب کننده CSS داده شده را اعمال کرده و یک نمونه لیست انتخاب را برگردانید.
Query رشته ای است که حاوی انتخاب کننده CSS برای اعمال است.
در پس زمینه ، نمایش داده شدگان CSS با استفاده از کتابخانه CSSlect به نمایش داده های XPath ترجمه می شوند و روش . xpath () را اجرا می کنند.
برای راحتی ، این روش را می توان به عنوان Response. css () نامید
سریال سازی و گره های همسان را در یک رشته واحد برگردانید. درصد رمزگذاری شده درصد نامشخص است.
فرهنگ لغت ویژگی ها را برای عنصر اساسی برگردانید.
regex داده شده را اعمال کرده و لیستی از رشته ها را با مسابقات برگردانید.
Regex می تواند یک عبارت معمولی کامپایل شده یا رشته ای باشد که با استفاده از re.compile (Regex) به یک عبارت معمولی گردآوری می شود.
به طور پیش فرض ، منابع موجودیت شخصیت با شخصیت مربوطه جایگزین می شوند (به جز & amp ؛ & & lt ؛). عبور از replace_entities به عنوان سوئیچ های کاذب این تعویض ها را خاموش می کند.
re_first (regex: اتحادیه [str ، الگوی [str]] ، پیش فرض: هیچ یک = هیچ یک ، جایگزین_توها: bool = true) → اختیاری [STR] [منبع] ¶ re_first (Regex: Union [str ، الگوی [str]] ، پیش فرض: str ، replace_entities: bool = true) → str
regex داده شده را اعمال کنید و اولین رشته را که مطابقت دارد برگردانید. در صورت عدم تطابی ، مقدار پیش فرض را برگردانید (در صورت عدم ارائه آرگومان).
به طور پیش فرض ، منابع موجودیت شخصیت با شخصیت مربوطه جایگزین می شوند (به جز & amp ؛ & & lt ؛). عبور از replace_entities به عنوان سوئیچ های کاذب این تعویض ها را خاموش می کند.
فضای نام داده شده را برای استفاده در این انتخاب ثبت کنید. بدون ثبت نام های نام ، نمی توانید داده ها را از فضای نام های غیر استاندارد انتخاب یا استخراج کنید. نمونه های انتخاب کننده را در پاسخ XML مشاهده کنید.
همه مکان های نام را حذف کنید ، و این امکان را برای عبور از سند با استفاده از XPaths کمتر از فضای نام فراهم می کند. به حذف نام های نام مراجعه کنید.
اگر محتوای واقعی انتخاب شده یا نادرست باشد ، درست برگردید. به عبارت دیگر ، مقدار بولی یک انتخاب کننده توسط محتواهایی که انتخاب می کند داده می شود.
سریال سازی کنید و گره همسان را در یک لیست 1 عنصر رشته ها برگردانید.
این روش برای ثبات به انتخاب اضافه می شود. با انتخاب لیست مفید است. همچنین مراجعه کنید: Extract () و Extract_First ()
اشیاء انتخاب لیست
کلاس Selectorlist یک زیر کلاس از کلاس List Builtin است که چند روش اضافی را ارائه می دهد.
XPath (XPath: Str ، Namespaces: اختیاری [نقشه برداری [STR ، STR]] = هیچ ، ** kwargs) → SelectorList [_selectortype] [منبع] ¶
برای هر عنصر در این لیست با روش . xpath () تماس بگیرید و نتایج آنها را به عنوان لیست انتخاب دیگر مسطح کنید.
پرس و جو همان استدلال است که در Selector. xpath ()
Namespaces یک پیشوند اختیاری است: Namespace-URI نقشه برداری (DICT) برای پیشوندهای اضافی برای کسانی که در Register_Namespace ثبت شده اند (پیشوند ، URI). برخلاف Register_Namespace () ، این پیشوندها برای تماس های آینده ذخیره نمی شوند.
هر آرگومان نامگذاری شده اضافی را می توان برای انتقال مقادیر برای متغیرهای XPath در بیان XPath ، به عنوان مثال: به عنوان مثال: استفاده کرد.
روش . css () را برای هر عنصر در این لیست فراخوانی کرده و نتایج آنها را به عنوان لیست انتخاب دیگر مسطح می کند.
پرس و جو همان استدلال است که در Selector. css ()
با روش . get () برای هر عنصر تماس بگیرید این لیست است و نتایج آنها را مسطح می کند ، به عنوان لیستی از رشته ها.
نتیجه . get () را برای اولین عنصر در این لیست برگردانید. اگر لیست خالی است ، مقدار پیش فرض را برگردانید.
روش . re () را برای هر عنصر در این لیست فراخوانی کرده و نتایج آنها را به عنوان لیستی از رشته ها مسطح کنید.
به طور پیش فرض ، منابع موجودیت شخصیت با شخصیت مربوطه جایگزین می شوند (به جز & amp ؛ و & lt ؛. عبور از جایگزین به عنوان سوئیچ های کاذب این جایگزین ها را خاموش می کند.
re_first (regex: اتحادیه [str ، الگوی [str]] ، پیش فرض: هیچ یک = هیچ یک ، جایگزین_توها: bool = true) → اختیاری [STR] [منبع] ¶ re_first (Regex: Union [str ، الگوی [str]] ، پیش فرض: str ، replace_entities: bool = true) → str
برای اولین عنصر در این لیست با روش . re () تماس بگیرید و نتیجه را در یک رشته برگردانید. اگر لیست خالی است یا REGEX با چیزی مطابقت ندارد ، مقدار پیش فرض را برگردانید (در صورت ارائه آرگومان ، هیچ کدام.
به طور پیش فرض ، منابع موجودیت شخصیت با شخصیت مربوطه جایگزین می شوند (به جز & amp ؛ و & lt ؛. عبور از جایگزین به عنوان سوئیچ های کاذب این جایگزین ها را خاموش می کند.
فرهنگ لغت ویژگی ها را برای عنصر اول برگردانید. اگر لیست خالی است ، یک دیک خالی را برگردانید.
مثال ها¶
نمونه های انتخاب کننده در پاسخ HTML¶
در اینجا برخی از نمونه های انتخاب کننده برای نشان دادن چندین مفهوم آورده شده است. در همه موارد ، ما فرض می کنیم در حال حاضر یک انتخاب کننده با یک شی HTMLRESPONSE مانند این وجود دارد:
همه عناصر را از یک بدنه پاسخ HTML انتخاب کنید و لیستی از اشیاء انتخاب کننده را برگردانید (یعنی یک شی انتخاب لیست):
متن همه عناصر را از بدنه پاسخ HTML استخراج کنید و لیستی از رشته ها را برگردانید:
تکرار بیش از همه
برچسب ها و چاپ ویژگی کلاس آنها:
نمونه های انتخاب کننده در پاسخ XML¶
در اینجا چند نمونه برای نشان دادن مفاهیم برای اشیاء انتخابی که با یک شیء XMLRESPONSE فوری شده اند ، آورده شده است:
همه عناصر را از یک بدنه پاسخ XML انتخاب کنید و لیستی از اشیاء انتخاب کننده را برگردانید (یعنی یک شی انتخاب لیست):
تمام قیمت ها را از یک فید XML پایه Google استخراج کنید که نیاز به ثبت نام نام دارد:
© کپی رایت 2008-2022 ، توسعه دهندگان SCRAPY. تجدید نظر 6DED3CF4. آخرین به روز شده در 02 نوامبر 2022.
مقالات آموزش فارکس...
ما را در سایت مقالات آموزش فارکس دنبال می کنید
برچسب :
نویسنده : بهزاد فراهانی
بازدید : <-PostHit->
تاريخ : دوشنبه
25 ارديبهشت
1402 ساعت: 11:34