داكن proxyscrape شعار

Web Scraping for News Articles using Python– Best Way In 2024

بايثون, 03-يناير-20235 دقائق للقراءة

الأخبار هي أفضل طريقة لمعرفة ما يحدث في جميع أنحاء العالم. بالنسبة لمهندسي البيانات ، تعد المقالات الإخبارية واحدة من الطرق الرائعة لجمع كميات سريالية من البيانات. المزيد من البيانات يعني المزيد من الأفكار ، وهذا هو الوحيد الذي يبتكر تقنيتنا ويصل بإنسانيتنا إلى مستويات أعلى من أي وقت مضى. ولكن هناك الكثير من الأخبار ، ومن المستحيل إنسانيا الحصول على جميع البيانات يدويا. ما هي أفضل طريقة للحصول على البيانات تلقائيا؟ الجواب هو تجريف الويب للمقالات الإخبارية باستخدام Python.

في هذه المقالة ، سنقوم بإنشاء مكشطة ويب لكشط أحدث المقالات الإخبارية من الصحف المختلفة وتخزينها كنص. سننتقل إلى الخطوتين التاليتين لإجراء تحليل متعمق لكيفية إجراء العملية برمتها.

  1. مقدمة على مستوى السطح لصفحات الويب و HTML.
  2. تجريف الويب باستخدام Python والمكتبة الشهيرة المسماة BeautifulSoup.

لا تتردد في الانتقال إلى أي أقسام لمعرفة المزيد حول كيفية إجراء تجريف الويب للمقالات الإخبارية باستخدام python

جدول المحتويات

مقدمة على مستوى السطح لصفحات الويب و HTML

إذا أردنا سحب معلومات مهمة من أي موقع ويب أو صفحة ويب ، فمن المهم معرفة كيفية عمل هذا الموقع. عندما ننتقل إلى عنوان URL المحدد باستخدام أي متصفح ويب (Chrome و Firefox و Mozilla وما إلى ذلك) ، فإن صفحة الويب هذه عبارة عن مزيج من ثلاث تقنيات ،

HTML (لغة ترميز النص التشعبي): يحدد HTML محتوى صفحة الويب. إنها لغة الترميز القياسية لإضافة محتوى إلى موقع الويب. على سبيل المثال ، إذا كنت ترغب في إضافة نص أو صور أو أي أشياء أخرى إلى موقع الويب الخاص بك ، فإن HTML يساعدك على القيام بذلك.

CSS (أوراق الأنماط المتتالية): يستخدم لتصميم صفحات الويب. يتعامل CSS مع جميع التصميمات المرئية التي تراها على موقع ويب معين.

جافا سكريبت: جافا سكريبت هو عقل صفحة ويب. تتعامل جافا سكريبت مع جميع وظائف المعالجة المنطقية وصفحة الويب. ومن ثم فإنه يسمح بجعل المحتوى والأسلوب تفاعليين.

تسمح لنا لغات البرمجة الثلاث هذه بإنشاء جوانب صفحة الويب ومعالجتها.

أفترض أنك تعرف أساسيات صفحة الويب و HTML لهذه المقالة. قد تكون بعض مفاهيم HTML مثل div والعلامات والعناوين وما إلى ذلك مفيدة جدا أثناء إنشاء مكشطة الويب هذه. لا تحتاج إلى معرفة كل شيء ولكن فقط أساسيات تصميم صفحة الويب وكيفية احتواء المعلومات فيها ، ونحن على ما يرام.

تجريف المقالات الإخبارية على الويب باستخدام حساء جميل في بايثون

تحتوي Python على العديد من الحزم التي تسمح لنا بكشط المعلومات من صفحة ويب. سنستمر مع BeautifulSoup لأنها واحدة من أشهر مكتبات Python وأكثرها سهولة في الاستخدام لتجريف الويب.

BeautifulSoup هو الأفضل لتحليل محتوى HTML لعنوان URL والوصول إليه باستخدام العلامات والتسميات. لذلك سيكون من المناسب استخراج أجزاء معينة من النص من الموقع.

مع 3-5 أسطر فقط من التعليمات البرمجية ، يمكننا القيام بالسحر واستخراج أي نوع من النص على موقعنا على الويب من الإنترنت ، مما يوضح أنه حزمة سهلة الاستخدام ولكنها قوية.

نبدأ من الأساسيات. لتثبيت حزمة المكتبة ، اكتب الأمر التالي في توزيع Python الخاص بك ،

! نقطة تثبيت بيوتيفولسوب4

سنستخدم أيضا "وحدة الطلبات" لأنها تزود BeautifulSoup برمز HTML لأي صفحة. لتثبيته ، اكتب الأمر التالي لتوزيع Python الخاص بك ،

! طلبات تثبيت النقطة

ستسمح لنا وحدة الطلبات هذه بالحصول على كود HTML من صفحة الويب والتنقل فيه باستخدام حزمة BeautfulSoup. الأمران اللذان سيجعلان مهمتنا أسهل بكثير هما

find_all (علامة العنصر ، السمة): تأخذ هذه الوظيفة العلامة والسمات كمعلماتها وتسمح لنا بتحديد موقع أي عنصر HTML من صفحة ويب. وسوف تحدد جميع العناصر من نفس النوع. يمكننا استخدام find() بدلا من ذلك للحصول على أول واحد فقط.

get_text (): بمجرد تحديد موقع عنصر معين ، يسمح لنا هذا الأمر باستخراج النص الداخلي.

للتنقل في كود HTML لصفحة الويب الخاصة بنا وتحديد العناصر التي نريد كشطها ، يمكننا استخدام خيار "فحص العنصر" بالنقر بزر الماوس الأيمن على الصفحة أو ببساطة الضغط على Ctrl + F. سيسمح لك برؤية الكود المصدري لصفحة الويب.

بمجرد تحديد موقع العناصر ذات الاهتمام ، سنحصل على كود HTML مع وحدة الطلبات ، ولاستخراج هذه العناصر ، سنستخدم BeautifulSoup.

في هذا المقال ، سننفذ مع صحيفة EL Paris الإنجليزية . سنقوم بكشط عناوين المقالات الإخبارية من الصفحة الأولى ثم النص.

إذا فحصنا كود HTML للمقالات الإخبارية ، فسنرى أن المقالة الموجودة في الصفحة الأولى لها بنية مثل هذه ،

The title has <h2> element with itemprop=”headline” and class=”articulo-titulo” attributes. It has an href attribute containing the text. So we will now extract the text using the following commands:

طلبات الاستيراد
من bs4 استيراد شوربة جميلة

بمجرد الحصول على محتوى HTML باستخدام وحدة الطلبات ، يمكننا حفظه في متغير صفحة الغلاف:

# طلب
r1 = requests.get (url)
r1.status_code
 
# سنحفظ في صفحة الغلاف محتوى صفحة الغلاف
صفحة الغلاف = r1.content

بعد ذلك ، سنحدد متغير الحساء ،

# حساء إنشاء الحساء
1 = حساء جميل (صفحة الغلاف ، 'html5lib')

في السطر التالي من التعليمات البرمجية ، سنحدد العناصر التي نبحث عنها ،

# تحديد الأخبار
coverpage_news = soup1.find_all('h2', class_='articulo-titulo')

باستخدام final_all ، نحصل على جميع الأحداث. لذلك يجب أن ترجع قائمة يكون فيها كل عنصر عبارة عن مقال إخباري ،

لتتمكن من استخراج النص ، سنستخدم الأمر التالي:

coverpage_news[4].get_text()

إذا أردنا الوصول إلى قيمة سمة (في حالتنا ، الرابط) ، فيمكننا استخدام الأمر التالي ،

coverpage_news[4]['href']

سيسمح لنا ذلك بالحصول على الرابط بنص عادي.

إذا كنت قد فهمت جميع المفاهيم حتى هذه النقطة ، فيمكنك كشط أي محتوى من اختيارك على الويب.

تتضمن الخطوة التالية الوصول إلى كل محتوى من محتوى المقالة الإخبارية باستخدام سمة href ، والحصول على شفرة المصدر للعثور على الفقرات في كود HTML ، وأخيرا الحصول عليها باستخدام BeautifulSoup. إنها نفس العملية التي وصفناها أعلاه ، لكننا نحتاج إلى تحديد العلامات والسمات التي تحدد محتوى المقالة الإخبارية.

ويرد رمز الوظائف الكاملة أدناه. لن أشرح كل سطر على حدة حيث يتم التعليق على الكود ؛ يمكن للمرء أن يفهم ذلك بوضوح من خلال قراءة تلك التعليقات.

number_of_articles = 5

# قوائم فارغة للمحتوى والروابط والعناوين
news_contents = []
list_links = []
list_titles = []
 
ل n في np.arange(0, number_of_articles):
    
# مقالات إخبارية فقط (هناك أيضا ألبومات وأشياء أخرى) إذا لم تكن "inenglish" في coverpage_news[n].find ('a') ['href']:  
        متابعة# الحصول على رابط رابط المقالة = coverpage_news[n].find('a')['href']
    list_links.إلحاق (رابط)
    
# الحصول على اللقب
    العنوان = coverpage_news[n].find('a').get_text()
    list_titles.إلحاق (عنوان)
    
# قراءة المحتوى (ينقسم إلى فقرات)
    مقالة = طلبات.الحصول على (رابط)
    article_content = مقالة المحتوى
    soup_article = حساء جميل (article_content ، 'html5lib')
    الجسم = soup_article.find_all ('div' ، class_ = 'articulo-cuerpo')
    x = الجسم [0] .find_all ('p')
    
# توحيد الفقرات
    list_paragraphs = []
    بالنسبة إلى p في np.arange (0 ، len (x)):
        الفقرة = x[p].get_text()
        list_paragraphs.إلحاق(فقرة)
        final_article = " ". انضم(list_paragraphs)
        
news_contents.ملحق(final_article)

دعونا نضع المقالات المستخرجة في ما يلي:

  • مجموعة بيانات ستدخل النماذج (df_features).
  • مجموعة بيانات مع العنوان والرابط (df_show_info).

# df_features
df_features = pd.DataFrame(
     {'Article Content': news_contents 
    })
 
# df_show_info
df_show_info = pd.DataFrame(
    {'Article Title': list_titles,
     'Article Link': list_links})
df_features

df_show_info

لتحديد تجربة مستخدم أفضل ، سنقيس أيضا الوقت الذي يستغرقه البرنامج النصي للحصول على الأخبار. سنحدد وظيفة لهذا ثم نتصل. مرة أخرى ، لن أشرح كل سطر من التعليمات البرمجية حيث يتم التعليق على الكود. للحصول على فهم واضح ، يمكنك قراءة هذه التعليقات.

def get_news_elpais():
    
    # url definition
    url = "https://elpais.com/elpais/inenglish.html"
    
    # Request
    r1 = requests.get(url)
    r1.status_code
 
    # We'll save in coverpage the cover page content
    coverpage = r1.content
 
    # Soup creation
    soup1 = BeautifulSoup(coverpage, 'html5lib')
 
    # News identification
    coverpage_news = soup1.find_all('h2', class_='articulo-titulo')
    len(coverpage_news)
    
    number_of_articles = 5
 
    # Empty lists for content, links and titles
    news_contents = []
    list_links = []
    list_titles = []
 
    for n in np.arange(0, number_of_articles):
 
        # only news articles (there are also albums and other things)
        if "inenglish" not in coverpage_news[n].find('a')['href']:  
            continue
 
        # Getting the link of the article
        link = coverpage_news[n].find('a')['href']
        list_links.append(link)
 
        # Getting the title
        title = coverpage_news[n].find('a').get_text()
        list_titles.append(title)
 
        # Reading the content (it is divided in paragraphs)
        article = requests.get(link)
        article_content = article.content
        soup_article = BeautifulSoup(article_content, 'html5lib')
        body = soup_article.find_all('div', class_='articulo-cuerpo')
        x = body[0].find_all('p')
 
        # Unifying the paragraphs
        list_paragraphs = []
        for p in np.arange(0, len(x)):
            paragraph = x[p].get_text()
            list_paragraphs.append(paragraph)
            final_article = " ".join(list_paragraphs)
 
        news_contents.append(final_article)
 
    # df_features
    df_features = pd.DataFrame(
         {'Content': news_contents 
        })
 
    # df_show_info
    df_show_info = pd.DataFrame(
        {'Article Title': list_titles,
         'Article Link': list_links,
         'Newspaper': 'El Pais English'})
    
    return (df_features, df_show_info)

ما هو أفضل وكيل لتجريف الويب للمقالات الإخبارية باستخدام Python؟

ProxyScrape هو واحد من مزودي البروكسي الأكثر شعبية وموثوقية على الإنترنت. تتضمن ثلاث خدمات بروكسي خوادم بروكسي مخصصة لمركز البيانات وخوادم بروكسي سكنية وخوادم بروكسي متميزة. إذن ، ما هو أفضل حل ممكن لأفضل وكيل HTTP لتجريف الويب للمقالات الإخبارية باستخدام python؟ قبل الإجابة على هذه الأسئلة ، من الأفضل رؤية ميزات كل خادم وكيل.

يعد وكيل مركز البيانات المخصص هو الأنسب للمهام عالية السرعة عبر الإنترنت ، مثل دفق كميات كبيرة من البيانات (من حيث الحجم) من خوادم مختلفة لأغراض التحليل. إنه أحد الأسباب الرئيسية التي تجعل المؤسسات تختار وكلاء مخصصين لنقل كميات كبيرة من البيانات في فترة زمنية قصيرة.

يحتوي وكيل مركز البيانات المخصص على العديد من الميزات ، مثل النطاق الترددي غير المحدود والاتصالات المتزامنة ، وبروكسيات HTTP المخصصة لسهولة الاتصال ، ومصادقة IP لمزيد من الأمان. مع وقت تشغيل بنسبة 99.9٪ ، يمكنك أن تطمئن إلى أن مركز البيانات المخصص سيعمل دائما خلال أي جلسة. أخيرا وليس آخرا ProxyScrape يوفر خدمة عملاء ممتازة وسيساعدك على حل مشكلتك في غضون 24-48 ساعة عمل. 

التالي هو وكيل سكني. السكنية هي وكيل الانتقال لكل مستهلك عام. السبب الرئيسي هو أن عنوان IP الخاص بالوكيل السكني يشبه عنوان IP الذي يوفره مزود خدمة الإنترنت. هذا يعني أن الحصول على إذن من الخادم الهدف للوصول إلى بياناته سيكون أسهل من المعتاد. 

الميزة الأخرى ل ProxyScrapeالوكيل السكني هو ميزة دوارة. يساعدك الوكيل الدوار على تجنب الحظر الدائم على حسابك لأن الوكيل السكني الخاص بك يغير عنوان IP الخاص بك ديناميكيا ، مما يجعل من الصعب على الخادم الهدف التحقق مما إذا كنت تستخدم وكيلا أم لا. 

بصرف النظر عن ذلك ، فإن الميزات الأخرى للوكيل السكني هي: عرض النطاق الترددي غير المحدود ، إلى جانب الاتصال المتزامن ، وبروكسيات HTTP / s المخصصة ، والوكلاء في أي جلسة زمنية بسبب 7 ملايين بالإضافة إلى الوكلاء في تجمع الوكيل ، ومصادقة اسم المستخدم وكلمة المرور لمزيد من الأمان ، وأخيرا وليس آخرا ، القدرة على تغيير خادم البلد. يمكنك تحديد الخادم الذي تريده عن طريق إلحاق رمز البلد بمصادقة اسم المستخدم. 

آخر واحد هو الوكيل المتميز. الوكلاء المتميزون هم نفس وكلاء مراكز البيانات المخصصين. تظل الوظيفة كما هي. الفرق الرئيسي هو إمكانية الوصول. في الوكلاء المميزين ، يتم توفير قائمة الوكيل (القائمة التي تحتوي على بروكسي) لكل مستخدم على ProxyScrapeشبكة. هذا هو السبب في أن الوكلاء المتميزين يكلفون أقل من وكلاء مراكز البيانات المخصصة.

إذن ، ما هو أفضل حل ممكن لأفضل وكيل HTTP لتجريف الويب للمقالات الإخبارية باستخدام python؟ الجواب سيكون "وكيل سكني". السبب بسيط. كما ذكر أعلاه ، فإن الوكيل السكني هو وكيل دوار ، مما يعني أنه سيتم تغيير عنوان IP الخاص بك ديناميكيا على مدار فترة زمنية يمكن أن يكون مفيدا لخداع الخادم عن طريق إرسال الكثير من الطلبات في إطار زمني صغير دون الحصول على كتلة IP. 

بعد ذلك ، سيكون أفضل شيء هو تغيير الخادم الوكيل بناء على البلد. عليك فقط إلحاق البلد ISO_CODE في نهاية مصادقة IP أو مصادقة اسم المستخدم وكلمة المرور. 

قراءات مقترحة:

  1. كشط تعليقات يوتيوب - 5 خطوات بسيطة
  2. أفضل 8 أدوات تجريف ويب Python في عام 2023

التعليمات:

1. What is the best way to scrape news articles using python?
The python library is called “BeautifulSoup” and can automatically scrape data from any news article. The only requirement would be a basic knowledge of HTML for locating the HTML tag from the page source code that contains the data that needs to be scraped.
2. Is it okay to scrape news articles from the website?
الجواب هو أنه يعتمد على شروط وأحكام الموقع. ولكن يمكن كشط معظم المقالات الإخبارية لأن جميع المعلومات متاحة للجمهور عن قصد. يمكن كشط جميع البيانات العامة طالما أن طريقة الكشط الخاصة بك لا تضر بالبيانات أو مالك موقع الويب.
3. How do I scrape Google News using Python?
يمكنك كشط أخبار Google أو أي مقالات إخبارية باستخدام python بمساعدة مكتبة python المسماة "BeautifulSoup". قم بتثبيت المكتبة ووكيل سكني موثوق به لمنع حظر IP من الخادم الهدف.

في المخص:

في هذه المقالة ، رأينا أساسيات تجريف الويب من خلال فهم أساسيات تصميم وهيكل تدفق صفحة الويب. لقد قمنا أيضا بتجربة عملية من خلال استخراج البيانات من المقالات الإخبارية. تجريف الويب يمكن أن يفعل المعجزات إذا تم القيام به بشكل صحيح. على سبيل المثال ، يمكن إنشاء نموذج محسن بالكامل بناء على البيانات المستخرجة التي يمكنها التنبؤ بالفئات وإظهار الملخصات للمستخدم. أهم شيء يجب فعله هو معرفة متطلباتك وفهم بنية الصفحة. تحتوي Python على بعض المكتبات القوية جدا وسهلة الاستخدام لاستخراج البيانات التي تختارها. وقد جعل ذلك تجريف الويب سهلا وممتعا للغاية.  

من المهم ملاحظة أن هذا الرمز مفيد لاستخراج البيانات من صفحة الويب هذه. إذا أردنا القيام بذلك من أي صفحة أخرى ، فنحن بحاجة إلى تحسين الكود الخاص بنا وفقا لهيكل تلك الصفحة. ولكن بمجرد أن نعرف كيفية التعرف عليها ، فإن العملية هي نفسها تماما.

تأمل هذه المقالة في شرح متعمق للنهج العملي لتجريف الويب للمقالات الإخبارية باستخدام python. شيء واحد يجب تذكره هو أن الوكيل هو ضرورة مطلقة لتجريف الويب. يساعد على منع أي كتل IP من الخادم الهدف. ProxyScrape يوفر وكيلا سكنيا رائعا وموثوقا به لتجريف الويب الخاص بك للمقالات الإخبارية باستخدام مشاريع Python.