मैं पायथन के साथ URL की सामग्री कैसे पढ़ सकता हूं?


93

जब मैं इसे ब्राउज़र पर पेस्ट करता हूं तो निम्नलिखित कार्य करता है:

http://www.somesite.com/details.pl?urn=2344

लेकिन जब मैं पायथन के साथ URL पढ़ने की कोशिश करता हूं तो कुछ नहीं होता है:

 link = 'http://www.somesite.com/details.pl?urn=2344'
 f = urllib.urlopen(link)           
 myfile = f.readline()  
 print myfile

क्या मुझे URL को एनकोड करने की आवश्यकता है, या ऐसा कुछ है जो मैं नहीं देख रहा हूं?

जवाबों:


156

तुम्हारे प्रश्न का उत्तर देने के लिए:

import urllib

link = "http://www.somesite.com/details.pl?urn=2344"
f = urllib.urlopen(link)
myfile = f.read()
print(myfile)

आपको करने की आवश्यकता है read(), नहींreadline()

EDIT (2018-06-25): पायथन 3 के बाद से, विरासत urllib.urlopen()को बदल दिया गया था urllib.request.urlopen()( https://docs.python.org/3/library/urllib.request.html#urllib.request.urquopopen के नोट देखें) ।

यदि आप पायथन 3 का उपयोग कर रहे हैं, तो इस प्रश्न के भीतर मार्टिन थोमा या इनम के उत्तर देखें: https://stackoverflow.com/a/28040508/158111 (पायथन 2/3 कंपास) https://stackoverflow.com/a/45886824 / 158111 (पायथन 3)

या, बस इस लाइब्रेरी को यहाँ प्राप्त करें: http://docs.python-requests.org/en/latest/ और गंभीरता से इसका उपयोग करें :)

import requests

link = "http://www.somesite.com/details.pl?urn=2344"
f = requests.get(link)
print(f.text)

@KiranSubbaraman यह एक बहुत अच्छी परियोजना है, API से लेकर कोड संरचना तक
— 4:02 बजे woozyking

मैं नए ब्रांड requestsमॉड्यूल का उपयोग करने के लिए प्रोग्रामर को फिर से शामिल करता हूं और प्रोत्साहित करता हूं , इसका उपयोग अधिक पायथोनिक कोड के लिए करता है।
— हंस ज़िमरमन

1
मैं अजगर 3.5.2 पर निम्नलिखित त्रुटि प्राप्त कर रहा हूं: Traceback (most recent call last): File "/home/lars/parser.py", line 9, in <module> f = urllib.urlopen(link) AttributeError: module 'urllib' has no attribute 'urlopen'लगता है कि अजगर 3.5 में कोई urlopen फ़ंक्शन नहीं है। क्या इसका नाम बदल दिया गया है? संपादित करें: नीचे दिए गए उत्तर में स्निपेट:from urllib.request import urlopen
— LMD

@ user7185318 ने पायथन 3 में हां urlibपैकेज में कुछ रीफैक्टरिंग और एपीआई परिवर्तन देखे। मैं पायथन 2 पर जोर देने के उत्तर को अपडेट
— करूंगा

क्या होगा यदि प्रदान किया गया लिंक उपयोगकर्ता नाम और पासवर्ड मांगता है? फिर कोड को कैसे बदला जा सकता है?
— डॉ। एसेन

27

के लिए python3उपयोगकर्ताओं, समय बचाने के लिए, निम्नलिखित कोड का उपयोग करने,

from urllib.request import urlopen

link = "https://docs.scipy.org/doc/numpy/user/basics.broadcasting.html"

f = urlopen(link)
myfile = f.read()
print(myfile)

मुझे पता है कि त्रुटि के लिए अलग-अलग सूत्र हैं: Name Error: urlopen is not definedलेकिन सोचा कि इससे समय की बचत हो सकती है।


यह python3 का उपयोग करके url से डेटा पढ़ने का सबसे अच्छा तरीका नहीं है क्योंकि यह 'स्टेटमेंट' स्टेटमेंट के फायदों से चूक जाता है। मेरा उत्तर देखें: stackoverflow.com/a/56295038/908316
— Jared

नहीं, यह लूप पर काम नहीं करेगा। केवल एक कॉल। जो चूसना है अगर आप मुझसे पूछें
— lone_coder

10

Python 2.X और Python 3.X के साथ काम करने वाला एक समाधान Python 2 और 3 संगतता लाइब्रेरी का उपयोग करता है six:

from six.moves.urllib.request import urlopen
link = "http://www.somesite.com/details.pl?urn=2344"
response = urlopen(link)
content = response.read()
print(content)

8

पायथन 3 के लिए इनमें से कोई भी उत्तर बहुत अच्छा नहीं है (इस पोस्ट के समय नवीनतम संस्करण पर परीक्षण किया गया है)।

इसे आपको इसी तरह करना होगा...

import urllib.request

try:
   with urllib.request.urlopen('http://www.python.org/') as f:
      print(f.read().decode('utf-8'))
except urllib.error.URLError as e:
   print(e.reason)

उपरोक्त सामग्री ऐसी है जो 'utf-8' लौटाती है। यदि आप "उपयुक्त एन्कोडिंग का अनुमान लगाना चाहते हैं" तो .decode ('utf-8') निकालें।

प्रलेखन: https://docs.python.org/3/library/urllib.request.html#module-urllib.request


धन्यवाद, मूल कोड पायथन 2 के लिए लिखा गया था, लेकिन यहां आपके योगदान को नोट किया गया है।
— हेलेन नेली

2

हम नीचे के रूप में वेबसाइट HTML सामग्री पढ़ सकते हैं:

from urllib.request import urlopen
response = urlopen('http://google.com/')
html = response.read()
print(html)

2
यह @innm से जवाब के समान है
— PeyM87

1
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Works on python 3 and python 2.
# when server knows where the request is coming from.

import sys

if sys.version_info[0] == 3:
    from urllib.request import urlopen
else:
    from urllib import urlopen
with urlopen('https://www.facebook.com/') as \
    url:
    data = url.read()

print data

# When the server does not know where the request is coming from.
# Works on python 3.

import urllib.request

user_agent = \
    'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7'

url = 'https://www.facebook.com/'
headers = {'User-Agent': user_agent}

request = urllib.request.Request(url, None, headers)
response = urllib.request.urlopen(request)
data = response.read()
print data

0

URL एक स्ट्रिंग होना चाहिए:

import urllib

link = "http://www.somesite.com/details.pl?urn=2344"
f = urllib.urlopen(link)           
myfile = f.readline()  
print myfile

11
पायथन में 'और' दोनों तार हैं
— लियो

0

मैंने निम्नलिखित कोड का उपयोग किया:

import urllib

def read_text():
      quotes = urllib.urlopen("https://s3.amazonaws.com/udacity-hosted-downloads/ud036/movie_quotes.txt")
      contents_file = quotes.read()
      print contents_file

read_text()

0
# retrieving data from url
# only for python 3

import urllib.request

def main():
  url = "http://docs.python.org"

# retrieving data from URL
  webUrl = urllib.request.urlopen(url)
  print("Result code: " + str(webUrl.getcode()))

# print data from URL 
  print("Returned data: -----------------")
  data = webUrl.read().decode("utf-8")
  print(data)

if __name__ == "__main__":
  main()

0
from urllib.request import urlopen

# if has Chinese, apply decode()
html = urlopen("https://blog.csdn.net/qq_39591494/article/details/83934260").read().decode('utf-8')
print(html)

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

0

आप उपयोग कर सकते हैं requestsऔर beautifulsoupपुस्तकालयों एक वेबसाइट पर डेटा को पढ़ने के लिए। बस इन दो पुस्तकालयों को स्थापित करें और निम्न कोड टाइप करें।

import requests
import bs4
help(requests)
help(bs4)

आपको लाइब्रेरी के बारे में सारी जानकारी मिल जाएगी।


helpदिए गए मॉड्यूल / वर्ग / फ़ंक्शन के प्रलेखन को देखने के लिए उपयोग किया जाता है। मुझे लगता है कि सवाल प्रतिक्रिया की सामग्री को देखने का एक तरीका पूछता है
— पानागोटीस सिमाकिस

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