मेरे पास एक बाहरी साइट के लिए एक साधारण पार्सर था जो यह पुष्टि करने के लिए आवश्यक है कि उपयोगकर्ता द्वारा सबमिट किया गया लिंक इस उपयोगकर्ता के स्वामित्व वाले खाते की ओर जाता है (लिंक किए गए पृष्ठ से उनकी प्रोफ़ाइल के लिंक को पार्स करके)। और इसने केवल इस वर्डप्रेस फ़ंक्शन के साथ लंबे समय तक काम किया:

function fetch_body_url($fetch_link){
    $response = wp_remote_get($fetch_link, array('timeout' => 120));
    return wp_remote_retrieve_body($response);
}

लेकिन फिर वेबसाइट ने अपने क्लाउडफ्लेयर डिफेंस में कुछ बदल दिया, और अब इसका परिणाम क्लाउडफ्लेयर के "कृपया प्रतीक्षा करें ..." पेज में है, जिसमें इसे पास करने का कोई विकल्प नहीं है।

बात यह है कि, मुझे इसे स्वचालित रूप से करने की भी आवश्यकता नहीं है - यदि कोई कैप्चा होता, तो उपयोगकर्ता इसे पूरा कर सकता था। लेकिन यह अंतहीन रूप से "आपके ब्राउज़र की जांच" करने के अलावा कुछ भी नहीं दिखाएगा।

कर्ल उदाहरणों का एक गुच्छा गुगल किया, और अब तक मुझे सबसे अच्छा यह मिल सकता है:

<?php
$url='https://ficbook.net/authors/1000'; //random profile from requrested website
$agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36';
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_REFERER, 'https://facebook.com/');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
$response = curl_exec($ch);
curl_close($ch);
echo '<textarea>'.$response.'</textarea>';
?>

फिर भी यह अभी भी ब्राउज़र चेक स्क्रीन लौटाता है। इसमें यादृच्छिक मुक्त प्रॉक्सी जोड़ना या तो काम नहीं कर रहा है, या हो सकता है कि मैं काम करने वाले को खोजने में भाग्यशाली नहीं था (या इस मामले में इसे सही तरीके से सम्मिलित करने का तरीका नहीं समझ सका)। क्या इसके आसपास कोई रास्ता है? या शायद यह देखने का कोई और तरीका है कि पृष्ठ पर कोई विशिष्ट कीवर्ड/लिंक है या नहीं?

0
Hitoris 8 मई 2021, 14:27

1 उत्तर

सबसे बढ़िया उत्तर

ठीक है, मैंने इस समस्या पर अधिकांश दिन बिताया है, और ऐसा लगता है कि मैंने इसे कमोबेश हल कर लिया है। बिल्कुल वैसा नहीं जैसा मैंने उम्मीद की थी, लेकिन हे, यह काम करता है... तरह।

सर्वर साइड पर इसे हल करने के बजाय, मैंने इसे अपने पीसी पर पार्स करने के लिए समाधान की तलाश में समाप्त कर दिया (यह मेरे होस्टिंग के सर्वर से बेहतर अपटाइम है)। पता चला है, उपयोग के लिए तैयार बहुत सारे ओपन सोर्स स्क्रैपर्स हैं, जिनमें वे भी शामिल हैं जो बिना किसी अच्छे कारण के अतिरिक्त रक्षात्मक होने के कारण क्लाउडफ्लेयर को बायपास करना जानते हैं।

मेरे जैसे अजगर डमी के लिए समाधान:

  1. यदि आपके पास अभी तक अजगर स्थापित नहीं है, तो एनाकोंडा स्थापित करें।

  2. सीएमडी प्रकार में pip install cloudscraper

  3. स्पाइडर खोलें (यह एनाकोंडा के साथ आता है) और इसे पेस्ट करें:

    import cloudscraper

    scraper = cloudscraper.create_scraper()

    print(scraper.get("https://your-parse-target/").text)

  4. इसे कहीं भी सहेजें और परीक्षण करने के लिए रन बटन पर प्रहार करें। यदि यह काम करता है, तो आपको अपना डेटा उसी ऐप के कंसोल विंडो में मिला है।

  5. आप उस डेटा के साथ जो कुछ भी करने जा रहे हैं, उसके साथ प्रिंट बदलें।

मेरे विशिष्ट मामले के लिए इसे mysql-connector-python स्थापित करने और MySQL डेटाबेस के लिए रिमोट एक्सेस सक्षम करने की भी आवश्यकता है (और मेरी होस्टिंग इस समय मुफ्त में उपलब्ध थी, हुह?) तो सीधे यह सत्यापित करने के बजाय कि उपयोगकर्ता उनके द्वारा इनपुट की गई प्रोफ़ाइल का स्वामी है, अब एक कतार है - जो सही नहीं है, लेकिन ओह ठीक है, उन्हें प्रतीक्षा करनी होगी।

सबसे पहले, उपयोगकर्ता अनुरोध को mysql में सहेजा जाता है। मेरी स्थानीय पायथन लिपि हर बार उस तालिका की जांच करेगी और यह देखने के लिए कि क्या कुछ भी सत्यापित किया जाना है। यह पृष्ठ की सामग्री प्राप्त करेगा और इसे वापस MySQL पर सहेज लेगा। फिर पुराना PHP पार्सर पहले की तरह अपना काम करेगा, लेकिन वास्तविक वेबसाइट के बजाय mysql से लाएं।

शायद ऐसे बेहतर समाधान हैं जिनके लिए एक अलग स्थानीय पार्सर बनाने जैसे उपायों का सहारा लेने की आवश्यकता नहीं है, लेकिन हो सकता है कि इससे किसी को इसी तरह की समस्या में मदद मिलेगी।

1
balmy 9 मई 2021, 10:46