पायथन के साथ Google समाचार को स्क्रैप करने के लिए चरण-दर-चरण गाइड

टिप्पणियाँ: 0

सबसे हालिया समाचारों की सुर्खियों को इकट्ठा करने, समाचार रुझानों की निगरानी करना, और वर्तमान मामलों पर भावना विश्लेषण करना, Google समाचार को स्क्रैप करना एक अमूल्य उपकरण साबित होता है। इस लेख में, हम आपको पायथन के माध्यम से Google समाचार को स्क्रैप करने की प्रक्रिया के माध्यम से मार्गदर्शन करेंगे। हम पृष्ठ सामग्री प्राप्त करने के लिए एक अनुरोध पुस्तकालय नियुक्त करेंगे; HTML दस्तावेजों को पार्स करने और आवश्यक डेटा निकालने के लिए LXML। इस ट्यूटोरियल के अंत तक, आप सीखेंगे कि न्यूज़ की सुर्खियों और उनके संबंधित लिंक को Google समाचार से संरचित JSON प्रारूप में कैसे निकालना है।

चरण 1: पर्यावरण की स्थापना

शुरू करने से पहले, सुनिश्चित करें कि आपने अपने सिस्टम पर पायथन स्थापित किया है। आप निम्न आदेशों को चलाकर आवश्यक पुस्तकालयों को स्थापित कर सकते हैं:

pip install requests 
pip install lxml

ये पुस्तकालय हमें HTTP अनुरोध करने और वेबपेज की HTML सामग्री को पार्स करने की अनुमति देंगे।

चरण 2: लक्ष्य URL और XPath संरचना को समझना

हम निम्नलिखित URL पर Google समाचार पृष्ठ को स्क्रैप करेंगे:

URL = "https://news.google.com/topics/CAAqKggKIiRDQkFTRlFvSUwyMHZNRGRqTVhZU0JXVnVMVWRDR2dKSlRpZ0FQAQ?hl=en-US&gl=US&ceid=US%3Aen"

इस पृष्ठ में कई समाचार आइटम हैं, जिनमें से प्रत्येक में एक मुख्य शीर्षक और संबंधित लेख हैं। इन वस्तुओं के लिए XPath संरचना इस प्रकार है:

  • मुख्य समाचार कंटेनर: //c-wiz[@jsrenderer="ARwRbe"]
  • मुख्य समाचार शीर्षक: //c-wiz[@jsrenderer="ARwRbe"]/c-wiz/div/article/a/text()
  • मुख्य समाचार लिंक: //c-wiz[@jsrenderer="ARwRbe"]/c-wiz/div/article/a/@href
  • संबंधित समाचार कंटेनर: //c-wiz[@jsrenderer="ARwRbe"]/c-wiz/div/div/article/
  • संबंधित समाचार शीर्षक: //c-wiz[@jsrenderer="ARwRbe"]/c-wiz/div/div/article/a/text()
  • संबंधित समाचार लिंक: //c-wiz[@jsrenderer="ARwRbe"]/c-wiz/div/div/article/a/@href

Google समाचार की HTML संरचना विभिन्न पृष्ठों के अनुरूप बनी हुई है, यह सुनिश्चित करता है कि निर्दिष्ट XPATH तत्व सार्वभौमिक रूप से लागू हैं।

चरण 3: Google समाचार सामग्री प्राप्त करना

हम अनुरोध लाइब्रेरी का उपयोग करके Google समाचार पृष्ठ की सामग्री प्राप्त करके शुरू करेंगे। यहाँ पृष्ठ सामग्री लाने के लिए कोड है:

import requests

url = "https://news.google.com/topics/CAAqKggKIiRDQkFTRlFvSUwyMHZNRGRqTVhZU0JXVnVMVWRDR2dKSlRpZ0FQAQ?hl=en-US&gl=US&ceid=US%3Aen"
response = requests.get(url)

if response.status_code == 200:
    page_content = response.content
else:
    print(f"Failed to retrieve the page. Status code: {response.status_code}")

यह कोड Google समाचार URL को GET अनुरोध भेजता है और पृष्ठ_कॉन्टेंट वैरिएबल में पृष्ठ की HTML सामग्री को संग्रहीत करता है।

चरण 4: LXML के साथ HTML सामग्री को पार्स करना

हाथ में HTML सामग्री के साथ, हम पृष्ठ को पार्स करने और समाचार सुर्खियों और लिंक को निकालने के लिए LXML का उपयोग कर सकते हैं।

from lxml import html

# HTML सामग्री को पार्स करें
parser = html.fromstring(page_content)

चरण 5: समाचार डेटा निकालना

Google समाचार विशिष्ट कंटेनरों में अपने लेखों का आयोजन करता है। हम पहले इन कंटेनरों को अपने XPath का उपयोग करके निकालेंगे और फिर व्यक्तिगत समाचार सुर्खियों और लिंक को निकालने के लिए उनके माध्यम से पुनरावृति करेंगे।

मुख्य समाचार लेख निकालना

मुख्य समाचार लेख निम्नलिखित XPATH के तहत स्थित हैं:

main_news_elements = parser.xpath('//c-wiz[@jsrenderer="ARwRbe"]')

अब हम पहले 10 वैध तत्वों के माध्यम से लूप कर सकते हैं और शीर्षक और लिंक निकाल सकते हैं:

news_data = []

for element in main_news_elements[:10]:
    title = element.xpath('.//c-wiz/div/article/a/text()')[0]
    link = "https://news.google.com" + element.xpath('.//c-wiz/div/article/a/@href')[0][1:]

    
    # यह सुनिश्चित करें कि सूची में शामिल होने से पहले डेटा मौजूद है
    if title and link:
        news_data.append({
        "main_title": title,
        "main_link": link,
    })

प्रत्येक मुख्य नए तत्व के भीतर संबंधित लेख निकालना

मुख्य समाचार तत्व में उपखंड हैं जहां संबंधित समाचार मौजूद हैं। हम एक समान दृष्टिकोण का उपयोग करके इन्हें निकाल सकते हैं:

related_articles = []
related_news_elements = element.xpath('.//c-wiz/div/div/article')

for related_element in related_news_elements:
    related_title = related_element.xpath('.//a/text()')[0]
    related_link = "https://news.google.com" + related_element.xpath('.//a/@href')[0][1:]
    related_articles.append({"title": related_title, "link": related_link})

news_data.append({
    "main_title": title,
    "main_link": link,
    "related_articles": related_articles
})

चरण 6: JSON

के रूप में डेटा सहेजना

डेटा निकालने के बाद, हम इसे बाद में उपयोग के लिए एक JSON फ़ाइल में सहेज सकते हैं।

import json

with open('google_news_data.json', 'w') as f:
    json.dump(news_data, f, indent=4)

यह कोड Google_news_data.json नाम की एक फ़ाइल बनाएगा जिसमें सभी स्क्रैप किए गए समाचार सुर्खियों और उनके संबंधित लिंक हैं।

प्रॉक्सी का उपयोग करना

जब बड़ी मात्रा में डेटा स्क्रैप करते हैं, विशेष रूप से Google समाचार जैसी उच्च-यातायात साइटों से, तो आप आईपी अवरुद्ध या दर सीमित जैसे मुद्दों का सामना कर सकते हैं। इससे बचने के लिए, आप प्रॉक्सी का उपयोग कर सकते हैं। प्रॉक्सी आपको विभिन्न आईपी पते के माध्यम से आपके अनुरोधों को रूट करने की अनुमति देता है, जिससे वेबसाइट के लिए आपकी स्क्रैपिंग गतिविधियों का पता लगाने और ब्लॉक करने के लिए कठिन हो जाता है।

इस ट्यूटोरियल के लिए, आप अनुरोधों को संशोधित करके एक प्रॉक्सी का उपयोग कर सकते हैं। कॉल:

proxies = {
    "http": "http://your_proxy_ip:port",
    "https": "https://your_proxy_ip:port",
}

response = requests.get(url, proxies=proxies)

यदि आप एक सेवा प्रदाता के साथ काम कर रहे हैं जो प्रॉक्सी रोटेशन का प्रबंधन करता है, तो आपको केवल अपने अनुरोधों में सेवा को कॉन्फ़िगर करने की आवश्यकता है। प्रदाता अपने अंत में रोटेशन और आईपी पूल प्रबंधन को संभालेगा।

अनुरोध हेडर को अनुकूलित करना

कभी-कभी, वेबसाइटें उन अनुरोधों को ब्लॉक कर सकती हैं जिनके पास उचित हेडर नहीं होते हैं, जैसे कि उपयोगकर्ता-एजेंट स्ट्रिंग जो एक ब्राउज़र से आने के रूप में अनुरोध की पहचान करता है। आप पता लगाने से बचने के लिए अपने हेडर को अनुकूलित कर सकते हैं:

headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'accept-language': 'en-IN,en;q=0.9',
    'cache-control': 'no-cache',
    'dnt': '1',
    'pragma': 'no-cache',
    'priority': 'u=0, i',
    'sec-ch-ua': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
    'sec-ch-ua-arch': '"x86"',
    'sec-ch-ua-bitness': '"64"',
    'sec-ch-ua-full-version-list': '"Not)A;Brand";v="99.0.0.0", "Google Chrome";v="127.0.6533.72", "Chromium";v="127.0.6533.72"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-model': '""',
    'sec-ch-ua-platform': '"Linux"',
    'sec-ch-ua-platform-version': '"6.5.0"',
    'sec-ch-ua-wow64': '?0',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'none',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
}

response = requests.get(url, headers=headers)

पूरा कोड उदाहरण

यहाँ पूर्ण कोड है, सभी चरणों को मिलाकर:

import requests
import urllib3
from lxml import html
import json

urllib3.disable_warnings()

# URL और हेडर
url = "https://news.google.com/topics/CAAqKggKIiRDQkFTRlFvSUwyMHZNRGRqTVhZU0JXVnVMVWRDR2dKSlRpZ0FQAQ?hl=en-US&gl=US&ceid=US%3Aen"
headers = {
   'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
   'accept-language': 'en-IN,en;q=0.9',
   'cache-control': 'no-cache',
   'dnt': '1',
   'pragma': 'no-cache',
   'priority': 'u=0, i',
   'sec-ch-ua': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
   'sec-ch-ua-arch': '"x86"',
   'sec-ch-ua-bitness': '"64"',
   'sec-ch-ua-full-version-list': '"Not)A;Brand";v="99.0.0.0", "Google Chrome";v="127.0.6533.72", "Chromium";v="127.0.6533.72"',
   'sec-ch-ua-mobile': '?0',
   'sec-ch-ua-model': '""',
   'sec-ch-ua-platform': '"Linux"',
   'sec-ch-ua-platform-version': '"6.5.0"',
   'sec-ch-ua-wow64': '?0',
   'sec-fetch-dest': 'document',
   'sec-fetch-mode': 'navigate',
   'sec-fetch-site': 'none',
   'sec-fetch-user': '?1',
   'upgrade-insecure-requests': '1',
   'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',
}

# प्रॉक्सी कॉन्फ़िगरेशन (अपने प्रॉक्सी विवरण के साथ बदलें)
proxy = 'ip:port'
proxies = {
   "http": f"http://{proxy}",
   "https": f"https://{proxy}",
}

# निर्दिष्ट हेडर और प्रॉक्सी के साथ पृष्ठ सामग्री प्राप्त करें
response = requests.get(url, headers=headers, proxies=proxies, verify=False)

# जाँच करें कि क्या अनुरोध सफल था
if response.status_code == 200:
   page_content = response.content
else:
   print(f"Failed to retrieve the page. Status code: {response.status_code}")
   exit()

# LXML का उपयोग करके HTML सामग्री को पार्स करें
parser = html.fromstring(page_content)

# मुख्य समाचार और संबंधित लेख निकालें
main_news_elements = parser.xpath('//*[@id="i10-panel"]/c-wiz/c-wiz')

# निकाले गए समाचार डेटा को संग्रहीत करने के लिए एक सूची शुरू करें
news_data = []

# प्रत्येक मुख्य समाचार तत्व के माध्यम से लूप
for element in main_news_elements[:10]:
   # मुख्य समाचार शीर्षक और लिंक निकालें
   title = element.xpath('.//c-wiz/div/article/a/text()')
   link = element.xpath('.//c-wiz/div/article/a/@href')

   # इस मुख्य समाचार के लिए संबंधित लेखों को संग्रहीत करने के लिए एक सूची शुरू करें
   related_articles = []

   # एक ही ब्लॉक के भीतर संबंधित समाचार तत्वों को निकालें
   related_news_elements = element.xpath('.//c-wiz/div/div/article')

   # प्रत्येक संबंधित समाचार तत्व के माध्यम से लूप करें और शीर्षक और लिंक निकालें
   for related_element in related_news_elements:
       related_title = related_element.xpath('.//a/text()')[0]
       related_link = "https://news.google.com" + related_element.xpath('.//a/@href')[0][1:]
       related_articles.append({"title": related_title, "link": related_link})

   # News_Data सूची में मुख्य समाचार और इसके संबंधित लेखों को जोड़ें
   if title is not None:
       news_data.append({
           "main_title": title,
           "main_link": f'https://news.google.com{link}',
           "related_articles": related_articles
       })
   else:
       continue


# निकाले गए डेटा को JSON फ़ाइल में सहेजें
with open("google_news_data.json", "w") as json_file:
   json.dump(news_data, json_file, indent=4)

print('Data extraction complete. Saved to google_news_data.json')

पायथन का उपयोग करके Google समाचार को स्क्रैप करना, अनुरोधों और LXML पुस्तकालयों के साथ, समाचार रुझानों के विस्तृत विश्लेषण की सुविधा प्रदान करता है। प्रॉक्सी को लागू करना और अनुरोध हेडर को कॉन्फ़िगर करना ब्लॉक से बचने और खुरचनी स्थिरता बनाए रखने के लिए महत्वपूर्ण है। इस उद्देश्य के लिए आदर्श परदे में IPv4 और IPv6 डेटासेंटर प्रॉक्सी और ISP प्रॉक्सी शामिल हैं, जो उच्च गति और कम पिंग प्रदान करते हैं। इसके अतिरिक्त, गतिशील आवासीय परदे अपने बेहतर ट्रस्ट कारक के कारण अत्यधिक प्रभावी हैं।

टिप्पणियाँ:

0 टिप्पणियाँ