ब्राउज़र विज़िट को नकली करने के लिए पायथन अनुरोधों का उपयोग कैसे करें?


127

मैं नीचे दी गई वेबसाइट से सामग्री प्राप्त करना चाहता हूं। यदि मैं फ़ायरफ़ॉक्स या क्रोम जैसे ब्राउज़र का उपयोग करता हूं तो मुझे वह असली वेबसाइट पेज मिल सकता है जिसे मैं चाहता हूं, लेकिन अगर मैं wgetइसे प्राप्त करने के लिए पायथन अनुरोध पैकेज (या कमांड) का उपयोग करता हूं , तो यह पूरी तरह से अलग HTML पृष्ठ देता है। मुझे लगा कि वेबसाइट के डेवलपर ने इसके लिए कुछ ब्लॉक बनाए हैं, इसलिए सवाल यह है कि:

अजगर अनुरोधों या कमांड विगेट का उपयोग करके मैं ब्राउज़र पर कैसे नकली हूँ?

http://www.ichangtou.com/#company:data_000008.html

जवाबों:


281

User-Agentहेडर प्रदान करें :

import requests

url = 'http://www.ichangtou.com/#company:data_000008.html'
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}

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

FYI करें, यहां विभिन्न ब्राउज़रों के लिए उपयोगकर्ता-एजेंट स्ट्रिंग्स की एक सूची दी गई है:


एक साइड नोट के रूप में, एक बहुत उपयोगी थर्ड-पार्टी पैकेज है, जिसे नकली-यूजरैगेंट कहा जाता है जो उपयोगकर्ता एजेंटों पर एक अच्छा अमूर्त परत प्रदान करता है:

नकली UserAgent

वास्तविक दुनिया डेटाबेस के साथ तिथि करने के लिए सरल useragent faker

डेमो:

>>> from fake_useragent import UserAgent
>>> ua = UserAgent()
>>> ua.chrome
u'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36'
>>> ua.random
u'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36'

1
आपके उत्तर के लिए धन्यवाद, मैंने अपने अनुरोधों में शीर्ष लेखों के साथ प्रयास किया, लेकिन फिर भी पृष्ठ की वास्तविक सामग्री प्राप्त नहीं कर सका, एक स्ट्रिंग है 'आपके वेब ब्राउज़र को इस एप्लिकेशन को सही ढंग से प्रदर्शित करने के लिए जावास्क्रिप्ट सक्षम होना चाहिए।' लौटे html पृष्ठ में, क्या मुझे अनुरोधों में जावा स्क्रिप्ट समर्थन जोड़ना चाहिए? यदि हां, तो मैं ऐसा कैसे करूंगा?
user1726366

8
@ user1726366: आप केवल जावास्क्रिप्ट समर्थन नहीं जोड़ सकते - इसके लिए आपको एक जावास्क्रिप्ट दुभाषिया की आवश्यकता है। सबसे सरल तरीका एक वास्तविक वेब ब्राउज़र के जावास्क्रिप्ट दुभाषिया का उपयोग करना है, लेकिन आप इसे सेलेनियम का उपयोग करके पायथन से स्वचालित कर सकते हैं ।
PM 2Ring

1
@ alecxe, @ sputnick: मैंने अजगर अनुरोधों और ब्राउज़र का उपयोग करने से अंतर की तुलना करने के लिए तारों को पैकेट के साथ पकड़ने की कोशिश की, ऐसा लगता है कि वेबसाइट url एक स्थिर नहीं है जिसे मुझे पृष्ठ को पूरा करने के लिए इंतजार करना होगा, इसलिए सेलेनियम लगता है मेरे लिए सही उपकरण। आपकी इस सदय सहायता के लिए धन्यवाद। :)
user1726366

4
@ user1726366 yup, यदि वास्तविक ब्राउज़र + सेलेनियम का उपयोग करना आपकी आवश्यकताओं को पूरा करता है तो यह सबसे दर्द रहित दृष्टिकोण है। ध्यान दें कि आप PhantomJSसेलेनियम के साथ हेडलेस ब्राउज़र का उपयोग कर सकते हैं । धन्यवाद। (यदि यह मददगार था तो उत्तर को स्वीकार करना न भूलें)
alecxe

30

यदि यह प्रश्न अभी भी मान्य है

मैंने नकली UserAgent का उपयोग किया

कैसे इस्तेमाल करे:

from fake_useragent import UserAgent
import requests


ua = UserAgent()
print(ua.chrome)
header = {'User-Agent':str(ua.chrome)}
print(header)
url = "https://www.hybrid-analysis.com/recent-submissions?filter=file&sort=^timestamp"
htmlContent = requests.get(url, headers=header)
print(htmlContent)

आउटपुट:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17
{'User-Agent': 'Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36'}
<Response [200]>

अभी भी त्रुटि हो रही है 404
मक्सिम नियाज़ेव

1
404 अलग त्रुटि है, आप सुनिश्चित करें कि आप ब्राउज़र का उपयोग करके पृष्ठ ब्राउज़ करने में सक्षम हैं?
उमेश कौशिक

पूर्ण रूप से। मुझे ऐसा लगता है कि मैं जिस वेब साइट का उपयोग कर रहा हूं, वह सभी Amazon EC2 IP को अवरुद्ध करने का प्रयास कर रही है।
मक्सिम नियाज़ेव

क्या आप कृपया यहाँ लिंक पिंग कर सकते हैं? मैं अपने अंत में कोशिश कर सकता हूं। इसके अलावा यदि आईपी अवरुद्ध है तो त्रुटि कोड 403 (निषिद्ध) या 401 (अनधिकृत) होना चाहिए। ऐसी वेबसाइटें हैं जो बिल्कुल भी स्क्रैपिंग की अनुमति नहीं देती हैं। वेबसाइट तक पहुँचने के लिए बॉट से बचने के लिए और भी कई वेबसाइटें क्लाउडफ़ेयर करती हैं।
उमेश कौशिक

यहाँ मेरा लिंक regalbloodline.com/music/eminem है । इसने पहले ठीक काम किया। अजगर पर काम करना बंद करना 2. स्थानीय मशीन पर अजगर 3 पर काम करना। AWS EC2 में जाने से वहां काम नहीं हुआ। 404 त्रुटि हो रही है। फिर स्थानीय मशीन पर भी काम करना बंद कर दिया। ब्राउज़र एमुलेशन का उपयोग करते हुए स्थानीय मशीन पर काम किया गया, लेकिन EC2 पर नहीं। अंत में मैंने हार मान ली और स्क्रैप करने के लिए वैकल्पिक वेबसाइट ढूंढ ली। वैसे क्या बादल फटने से बचा जा सकता है?
मक्सिम नियाज़ेव

7

नकली उपयोगकर्ता एजेंट के रूप में फ़ायरफ़ॉक्स का उपयोग करके ऐसा करने का प्रयास करें (इसके अलावा, यह कुकीज़ के उपयोग के साथ वेब स्क्रैपिंग के लिए एक अच्छा स्टार्टअप स्क्रिप्ट है:

#!/usr/bin/env python2
# -*- coding: utf8 -*-
# vim:ts=4:sw=4


import cookielib, urllib2, sys

def doIt(uri):
    cj = cookielib.CookieJar()
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
    page = opener.open(uri)
    page.addheaders = [('User-agent', 'Mozilla/5.0')]
    print page.read()

for i in sys.argv[1:]:
    doIt(i)

उपयोग:

python script.py "http://www.ichangtou.com/#company:data_000008.html"

3

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

इसलिए जब आपको अनुरोधों का उपयोग करके किसी वेबसाइट से प्रतिक्रिया मिलती है तो आप वास्तव में html / पाठ को देखते हैं क्योंकि हो सकता है कि आपको Javascripts JSON पाद लेख तैयार करने के लिए तैयार हो।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.