اشكال مجنونه وصف كائن الاستجابة استجابات غير صالحة html
لنفترض أننا بحاجة إلى الحصول على بيانات من موقع ويب، حيث يكون جمعها يدويًا غير عملي أو مستحيل بسبب حجمها. في هذه الحالة، يمكننا أتمتة العملية باستخدام الأدوات الموضحة أدناه.
مكتبة الطلباتمكتبة بايثون لتقديم الطلبات إلى الخادم ومعالجة الاستجابات. أساس نص التحليل وسلاحنا الرئيسي. باستخدام هذه المكتبة، نتلقى محتويات الصفحة في شكل HTML لمزيد من التحليل.
استجابة طلبات الاستيراد = الطلبات . get ("https://ya.ru") # طباعة طلب الحصول (response . text) # محتويات صفحة الإخراج payload = ( "key1" : "value1" , "key2" : "value2" ) الاستجابة = الطلبات . get ("http://httpbin.org/get" , params = payload ) # طلب ذو معلمات headers = ( "user-agent" : "my-app/0.0.1") Response = requests . الحصول على (url, headers = headers) # طلب برؤوس html محددة
واجهة برمجة التطبيقاتواجهة برمجة التطبيقات – واجهة برمجة التطبيقات التي يقدمها مالك تطبيق الويب للمطورين الآخرين. إن عدم وجود واجهة برمجة تطبيقات يمكنها تلبية احتياجاتنا هو أول شيء يجب أن نتأكد منه قبل التسرع في تحليل الكود المصدري للصفحة وكتابة محلل لها. تحتوي العديد من المواقع الشهيرة على واجهة برمجة التطبيقات (API) الخاصة بها والوثائق التي تشرح كيفية استخدامها. يمكننا استخدام واجهة برمجة التطبيقات بهذه الطريقة - نقوم بتكوين طلب http وفقًا للوثائق، ونتلقى استجابة باستخدام الطلبات.
بي أس 4Beautifulsoup4 هي مكتبة لتحليل مستندات html وxml. يسمح لك بالوصول مباشرة إلى محتوى أي علامات في HTML.
من bs4 import BeautifulSoup Soup = BeautifulSoup (raw_html, "html.parser") print (soup . find ( "p" , class_ = "some-class" ) . text ) # إخراج محتويات العلامة "p" مع الفصل "بعض الطبقة"
برنامج تشغيل الويب السيلينيوميمكن إنشاء البيانات الموجودة على الموقع ديناميكيًا باستخدام جافا سكريبت. في هذه الحالة، لن يكون من الممكن تحليل هذه البيانات باستخدام request+bs4. الحقيقة هي أن bs4 يقوم بتحليل الكود المصدري للصفحة دون تنفيذ js. لتنفيذ كود JS والحصول على صفحة مماثلة لتلك التي نراها في المتصفح، يمكنك استخدام برنامج تشغيل الويب السيلينيوم - هذه مجموعة من برامج التشغيل لمتصفحات مختلفة، مزودة بمكتبات للعمل مع برامج التشغيل هذه.
ماذا تفعل إذا كان هناك إذن؟جلسة = طلبات. بيانات الجلسة () = ("login_username": "login"، "login_password": "password") url = "http://site.com/login.php" Response = session.post(url، data) = البيانات)
ماذا لو قام أحد المواقع بحظرك بسبب عدد كبير جدًا من الطلبات؟- ضبط التأخير بين الطلبات:
الاستجابة = request.get(url, timeout=(10, 0.01)) # مهلة الاتصال، مهلة القراءة (بالثواني)
- التظاهر بأنك متصفح يستخدم برنامج تشغيل الويب السيلينيوم أو يمرر محتويات رأس وكيل المستخدم عند تقديم طلب:
user_agent = ("Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:50.0) " ""Gecko/20100101 Firefox/50.0") request = Requests.get(url, headers=("User-Agent":user_agent))
- استخدام بروكسي:
بعد تلقي رسالة طلب وتفسيرها، يستجيب الخادم برسالة استجابة HTTP:
- خط الحالة
- صفر أو أكثر من حقول الرأس (عام|الاستجابة|الكيان) متبوعة بـ CRLF
- سطر فارغ (أي سطر لا يسبقه أي شيء CRLF) يشير إلى نهاية حقول الرأس
- اختياريا نص الرسالة
تشرح الأقسام التالية الكيانات المستخدمة في رسالة استجابة HTTP.
خط حالة الرسالةيتكون سطر الحالة من إصدار البروتوكول متبوعًا برمز الحالة الرقمي والعبارة النصية المرتبطة به. يتم فصل العناصر بمسافات SP.
سيُرجع الخادم الذي يدعم الإصدار 1.1 من HTTP معلومات الإصدار التالية:
إصدار HTTP = HTTP/1.1
رمز الحالةعنصر رمز الحالة عبارة عن عدد صحيح مكون من 3 أرقام حيث يحدد الرقم الأول من رمز الحالة فئة الاستجابة ولا يحتوي الرقمان الأخيران على أي دور تصنيف. هناك 5 قيم للرقم الأول:
1 | 1xx: معلوماتية وهذا يعني أنه تم استلام الطلب وأن العملية مستمرة. |
2 | 2xx: النجاح وهذا يعني أنه تم استلام الإجراء وفهمه وقبوله بنجاح. |
3 | 3xx: إعادة التوجيه وهذا يعني أنه يجب اتخاذ المزيد من الإجراءات لإكمال الطلب. |
4 | 4xx: خطأ في العميل وهذا يعني أن الطلب يحتوي على بناء جملة غير صحيح أو لا يمكن تحقيقه. |
5 | 5xx: خطأ في الخادم وهذا يعني أن الخادم فشل في تلبية طلب صالح على ما يبدو. |
رموز حالة HTTP قابلة للتوسيع ولا يُطلب من تطبيقات HTTP فهم معنى جميع رموز الحالة المسجلة. تم تقديم قائمة بجميع رموز الحالة في فصل منفصل للرجوع إليها.
حقول رأس الاستجابةسندرس الرأس العام ورأس الكيان في فصل منفصل عندما نتعلم حقول رأس HTTP. في الوقت الحالي، دعونا نتحقق من حقول رأس الاستجابة.
تسمح حقول رأس الاستجابة للخادم بتمرير معلومات إضافية حول الاستجابة والتي لا يمكن وضعها في سطر الحالة. توفر حقول الرأس هذه معلومات حول الخادم وحول الوصول الإضافي إلى المورد المحدد بواسطة Request-URI.
-
مصادقة الوكيل
-
مصادقة WWW
يمكنك تقديم الحقول المخصصة الخاصة بك في حالة قيامك بكتابة عميل الويب والخادم المخصصين الخاصين بك.
أمثلة على رسالة الردالآن دعونا نجمع كل ذلك معًا لتكوين استجابة HTTP لطلب جلب صفحة hello.htm من خادم الويب الذي يعمل في الموقع
HTTP/1.1 200 OK التاريخ: الاثنين، 27 يوليو 2009 12:28:53 بتوقيت جرينتش الخادم: Apache/2.2.14 (Win32) آخر تعديل: الأربعاء، 22 يوليو 2009 19:15:56 بتوقيت جرينتش طول المحتوى: 88 محتوى- النوع: نص/html الاتصال: مغلق أهلاً بالعالم!
يوضح المثال التالي رسالة استجابة HTTP تعرض حالة الخطأ عندما يتعذر على خادم الويب العثور على الصفحة المطلوبة:
HTTP/1.1 404 لم يتم العثور عليه التاريخ: الأحد، 18 أكتوبر 2012 10:36:20 بتوقيت جرينتش الخادم: Apache/2.2.14 (Win32) طول المحتوى: 230 الاتصال: مغلق نوع المحتوى: نص/html؛ مجموعة الأحرف=iso-8859-1 404 لم يتم العثور عليها لم يتم العثور عليها
لم يتم العثور على عنوان URL المطلوب /t.html على هذا الخادم.
ما يلي هو مثال لرسالة استجابة HTTP التي تظهر حالة الخطأ عندما واجه خادم الويب إصدار HTTP خاطئًا في طلب HTTP المحدد:
HTTP/1.1 400 تاريخ الطلب السيئ: الأحد، 18 أكتوبر 2012، الساعة 10:36:20 بتوقيت جرينتش الخادم: Apache/2.2.14 (Win32) طول المحتوى: 230 نوع المحتوى: نص/html؛ charset=iso-8859-1 الاتصال: مغلق 400 طلب سيء طلب سيء
أرسل متصفحك طلبًا لم يتمكن هذا الخادم من فهمه.
يحتوي سطر الطلب على أحرف غير صالحة تتبع سلسلة البروتوكول.
الكائن الموصوف هو أداة مفيدة وقوية للغاية. يحتوي هذا الكائن على عدة طرق، ويرد وصفها أدناه:
المجموعات: طُرق: ملكيات: الاستجابة. جمع ملفات تعريف الارتباطتقوم مجموعة ملفات تعريف الارتباط بتعيين قيم لملفات تعريف الارتباط. إذا كانت ملفات تعريف الارتباط المحددة غير موجودة، فسيتم إنشاؤها. إذا كان ملف تعريف الارتباط موجودًا، فإنه يأخذ قيمة جديدة ويدمر القيمة القديمة.
Response.Cookies(ملف تعريف الارتباط) [(مفتاح) | . السمات ] = القيمة
خيارات:
- ملف تعريف الارتباط - اسم ملف تعريف الارتباط
- المفتاح - المعلمة الاختيارية. إذا تم تحديده، فإن ملف تعريف الارتباط هو دليل (متداخل) والمفتاح عبارة عن مجموعة من القيم.
- السمات - معلومات محددة حول ملفات تعريف الارتباط نفسها. يمكن أن تكون هذه المعلمة واحدة مما يلي:
- القيمة - تحدد القيمة التي سيتم تعيينها لهذا المفتاح أو السمة.
اسم | وصف |
اِختِصاص | التسجيل فقط. إذا تم تحديدها، يتم إرسال ملفات تعريف الارتباط فقط عند الطلب من هذا المجال. |
تنتهي | التسجيل فقط. التاريخ الذي تنتهي فيه صلاحية ملف تعريف الارتباط. ويجب تعيين هذا التاريخ حتى تتم كتابة ملفات تعريف الارتباط على القرص الصلب الخاص بالعميل بعد انتهاء الجلسة. إذا لم يتم تعيين هذه السمة، فمن المفترض أن يكون تاريخ انتهاء صلاحية ملف تعريف الارتباط هو التاريخ الحالي. ستنتهي صلاحية ملفات تعريف الارتباط فور انتهاء الجلسة. |
هاسكي | القراءة فقط. يشير إلى ما إذا كان ملف تعريف الارتباط يحتوي على المفتاح المحدد. |
طريق | التسجيل فقط. إذا تم تحديدها، فسيتم إرسال ملفات تعريف الارتباط فقط عند الطلب من هذا المسار. إذا لم يتم تعيين المعلمة، فسيتم استخدام المسار إلى التطبيق. |
يؤمن | التسجيل فقط. يشير إلى ما إذا كانت ملفات تعريف الارتباط ستكون محمية أم لا. |
تعليق:
إذا تم إنشاء ملف تعريف الارتباط الرئيسي كما هو موضح في البرنامج النصي التالي،
ثم سيتم إرسال الرأس التالي:
مجموعة ملفات تعريف الارتباط:MYCOOKIE=TYPE1=sugar&TYPE2=ملفات تعريف الارتباط
إذا قمت بتعيين قيمة لملف mycookie دون استخدام المفاتيح، فسيؤدي هذا الإجراء إلى تدمير مفاتيح النوع 1 والنوع 2. على سبيل المثال:
في المثال السابق، سيتم تدمير المفتاحين type1 وtype2 وفقدان قيمهما. سيحتوي Mycookie الآن على شوكولاتة المارشميلو القيمة.
يمكنك أيضًا التحقق من وجود مفتاح معين بالطريقة التالية:
إذا تم عرض TRUE، فهذا يعني أن هذا المفتاح موجود؛ وإذا تم عرض FALSE، فلن يكون موجودًا.
طريقة الرد.الكتابةالاستجابة.اكتب متغير_أو_قيمة
خيارات:
- variable_or_value - البيانات التي سيتم عرضها على شاشة المتصفح عبر HTML. يمكن أن تكون هذه المعلمة من أي نوع معتمد بواسطة VisualBasic Scripting Edition. أي أن البيانات يمكن أن تكون من الأنواع التالية: التاريخ، السلسلة، الحرف، القيم الرقمية. لا يمكن أن تحتوي قيمة هذه المعلمة على المجموعة %>. بدلاً من ذلك، يمكنك استخدام التركيبة المكافئة %\>. سيقوم خادم الويب بتحويل هذا التسلسل إلى التسلسل المطلوب عند تنفيذ البرنامج النصي.
يوضح المثال التالي كيفية عمل أسلوب Response.write لإخراج رسالة إلى العميل.
سأقول لك فقط: واسمك
يضيف المثال التالي علامة HTML إلى صفحة ويب. وبما أن هذه الطريقة لا يمكن أن تحتوي على المجموعة %>، فإننا نستخدم التسلسل %\>. إذن مثال على البرنامج النصي:
سيكون الإخراج هو السطر: