مرحبا ، خابروفشان! لفترة طويلة كانت هناك رغبة في كتابة مقال ، لكن لم يجرؤ.
ستصف سلسلة منشوراتي طريقي من Junior إلى Middle ، ومن ثم ربما حتى إلى Senior. سنقوم البرنامج في بيثون.
سيتم إرفاق وثائق PS لبعض المكتبات غير المعروفة في النهاية.
باختصار عن نفسي: بدأت بيثون في الدراسة قبل عامين ، ولم تكن هناك تطورات خاصة.
أصبحت الأساسيات نفسها مخيبة للآمال ، حيث قمت بتدريسها لمدة عام ونصف. الآن أنا أدرس اللغة بعمق ، وأنا أفهم هيكلها وكيف يحدث كل شيء. في المقالات التالية ، سوف أقوم بتحميل الكود ، واستخدم جميع المكتبات الجديدة والجديدة ، وكما تعلم ، لدى python الكثير :)
من أين تبدأ؟ قبل شهرين كتبت أول محلل. اتضح أن كتابة المحللون بسيطة للغاية ويمكنك حتى كسب المال عليها. حتى الآن ، سأريك مثالين باستخدام المكدس من 
طلبات bs4 + . سوف نحلل حبيبنا الحبيب.
لست متأكدًا مما إذا كان الجميع على دراية بمكتبة 
fake_useragent . إنه مناسب تمامًا للتحليل ؛ فهو يخلق وهمية وكيل المستخدم.
 ua = UserAgent() headers = {'accept': '*/*', 'user-agent': ua.firefox} 
هذه هي المجموعة الصغيرة التالية من الكود. في السطر الأول ، أنشأنا متغير ua ، والذي يستخدم أساليب فئة UserAgent. في السطر الثاني ، أنشأنا قاموسًا سيساعدنا في التحليل اللغوي في المستقبل.
الآن قم بإنشاء الوظيفة نفسها للتحليل.
 def without_post(url, headers): response = requests.get(url, headers=headers) if response.status_code == 200: soup = bs(response.text, 'html.parser') links = {} for i in soup.find_all('a', {'class': 'post__title_link'}): links.update({i.text: i.get('href')}) return links else: print("Connection Error") 
ستقوم هذه الوظيفة بتحليل الرابط ، الذي نشير إلى وجود علامة مع الفئة "post__title_link".
أسهل طريقة لحفظ البيانات هي حفظها في ملف. لذلك دعونا نفعل ذلك.
 url = "https://habr.com/ru/all/" links = without_post(url, headers) with open('parsed.txt', 'w') as f_obj: for name, href in links.items(): f_obj.write(name + ':\n' + href + '\n\n') 
في النهاية ، نحصل على ملف يحتوي على أسماء وروابط المشاركات التي جمعناها من الصفحة الأولى.
شفرة المصدر (كاملة) ، فقط دون تعليق:
 from bs4 import BeautifulSoup as bs from fake_useragent import UserAgent import requests ua = UserAgent() headers = {'accept': '*/*', 'user-agent': ua.firefox} def without_post(url, headers): response = requests.get(url, headers=headers) if response.status_code == 200: soup = bs(response.text, 'html.parser') links = {} for i in soup.find_all('a', {'class': 'post__title_link'}): links.update({i.text: i.get('href')}) return links else: print("Connection Error") url = "https://habr.com/ru/all/" links = without_post(url, headers) with open('parsed.txt', 'w') as f_obj: for name, href in links.items(): f_obj.write(name + ':\n' + href + '\n\n') 
نتيجة جيدة! باستثناء تخطيات الخط والتعليقات ، التقينا 20 سطرًا بالضبط. بالنسبة للمبتدئين ، جيد جدا :)
كما وعدت ، روابط لوثائق المكتبات المستخدمة:
الطلبات: 
* الضغط *bs4: 
* ضغط *fake_useragent: 
* الضغط *شكرا لكم جميعا على اهتمامكم! اراك قريبا!
ملاحظة: إذا كان هناك أي ملاحظات ، فلن تكون المقالة التالية طويلة في المستقبل