पायथन वेब स्क्रैपिंग - प्रोसेसिंग कैप्चा
इस अध्याय में, हम समझते हैं कि वेब स्क्रैपिंग और प्रसंस्करण कैप्चा कैसे करें जो मानव या रोबोट के लिए उपयोगकर्ता के परीक्षण के लिए उपयोग किया जाता है।
कैप्चा क्या है?
कैप्चा का पूर्ण रूप है Completely Automated Public Turing test to tell Computers and Humans Apart, जो स्पष्ट रूप से बताता है कि यह निर्धारित करने के लिए एक परीक्षण है कि उपयोगकर्ता मानव है या नहीं।
एक कैप्चा एक विकृत छवि है जिसे आमतौर पर कंप्यूटर प्रोग्राम द्वारा पता लगाना आसान नहीं है लेकिन एक मानव किसी तरह इसे समझने का प्रबंधन कर सकता है। बॉट को बातचीत से रोकने के लिए ज्यादातर वेबसाइट कैप्चा का इस्तेमाल करती हैं।
अजगर के साथ कैप्चा लोड हो रहा है
मान लीजिए हम एक वेबसाइट पर पंजीकरण करना चाहते हैं और कैप्चा के साथ फार्म है, तो कैप्चा छवि को लोड करने से पहले हमें फॉर्म द्वारा आवश्यक विशिष्ट जानकारी के बारे में जानना होगा। अगली पायथन लिपि की मदद से हम नामित वेबसाइट पर पंजीकरण फॉर्म की आवश्यकताओं को समझ सकते हैंhttp://example.webscrapping.com.
import lxml.html
import urllib.request as urllib2
import pprint
import http.cookiejar as cookielib
def form_parsing(html):
tree = lxml.html.fromstring(html)
data = {}
for e in tree.cssselect('form input'):
if e.get('name'):
data[e.get('name')] = e.get('value')
return data
REGISTER_URL = '<a target="_blank" rel="nofollow"
href="http://example.webscraping.com/user/register">http://example.webscraping.com/user/register'</a>
ckj = cookielib.CookieJar()
browser = urllib2.build_opener(urllib2.HTTPCookieProcessor(ckj))
html = browser.open(
'<a target="_blank" rel="nofollow"
href="http://example.webscraping.com/places/default/user/register?_next">
http://example.webscraping.com/places/default/user/register?_next</a> = /places/default/index'
).read()
form = form_parsing(html)
pprint.pprint(form)
उपरोक्त पायथन लिपि में, पहले हमने एक फ़ंक्शन को परिभाषित किया जो कि lxml python मॉड्यूल का उपयोग करके फॉर्म को पार्स करेगा और फिर यह फॉर्म की आवश्यकताओं को निम्नानुसार प्रिंट करेगा -
{
'_formkey': '5e306d73-5774-4146-a94e-3541f22c95ab',
'_formname': 'register',
'_next': '/places/default/index',
'email': '',
'first_name': '',
'last_name': '',
'password': '',
'password_two': '',
'recaptcha_response_field': None
}
आप उपरोक्त आउटपुट से जांच सकते हैं कि सभी जानकारी को छोड़कर recpatcha_response_fieldसमझने योग्य और सीधे हैं। अब सवाल यह उठता है कि हम इस जटिल जानकारी को कैसे संभाल सकते हैं और कैप्चा डाउनलोड कर सकते हैं। यह निम्नानुसार तकिया पायथन पुस्तकालय की मदद से किया जा सकता है;
तकिया पायथन पैकेज
पिलो पायथन इमेज लाइब्रेरी का एक कांटा है जिसमें छवियों को हेरफेर करने के लिए उपयोगी कार्य हैं। इसे निम्नलिखित कमांड की सहायता से स्थापित किया जा सकता है -
pip install pillow
अगले उदाहरण में हम इसका इस्तेमाल कैप्चा लोड करने के लिए करेंगे -
from io import BytesIO
import lxml.html
from PIL import Image
def load_captcha(html):
tree = lxml.html.fromstring(html)
img_data = tree.cssselect('div#recaptcha img')[0].get('src')
img_data = img_data.partition(',')[-1]
binary_img_data = img_data.decode('base64')
file_like = BytesIO(binary_img_data)
img = Image.open(file_like)
return img
उपरोक्त अजगर स्क्रिप्ट का उपयोग कर रहा है pillowअजगर पैकेज और कैप्चा छवि लोड करने के लिए एक फ़ंक्शन को परिभाषित करना। यह नाम के फ़ंक्शन के साथ उपयोग किया जाना चाहिएform_parser()कि पंजीकरण फार्म के बारे में जानकारी प्राप्त करने के लिए पिछले स्क्रिप्ट में परिभाषित किया गया है। यह स्क्रिप्ट एक उपयोगी प्रारूप में कैप्चा छवि को बचाएगा, जिसे आगे स्ट्रिंग के रूप में निकाला जा सकता है।
ओसीआर: पायथन का उपयोग करके छवि से पाठ निकालना
एक उपयोगी प्रारूप में कैप्चा लोड करने के बाद, हम इसे ऑप्टिकल कैरेक्टर रिकॉग्निशन (ओसीआर) की मदद से निकाल सकते हैं, छवियों से पाठ निकालने की प्रक्रिया। इस उद्देश्य के लिए, हम खुले स्रोत Tesseract OCR इंजन का उपयोग करने जा रहे हैं। इसे निम्नलिखित कमांड की सहायता से स्थापित किया जा सकता है -
pip install pytesseract
उदाहरण
यहाँ हम उपरोक्त पायथन लिपि का विस्तार करेंगे, जिसने पिल्थन पायथन पैकेज का उपयोग करके कैप्चा लोड किया, जो निम्नानुसार है -
import pytesseract
img = get_captcha(html)
img.save('captcha_original.png')
gray = img.convert('L')
gray.save('captcha_gray.png')
bw = gray.point(lambda x: 0 if x < 1 else 255, '1')
bw.save('captcha_thresholded.png')
उपरोक्त पायथन लिपि काले और सफेद मोड में कैप्चा को पढ़ेगी जो स्पष्ट और आसान होगा जो टेसरैक्ट को पास करेगा: -
pytesseract.image_to_string(bw)
उपरोक्त स्क्रिप्ट को चलाने के बाद हमें आउटपुट के रूप में पंजीकरण फॉर्म का कैप्चा मिलेगा।