Подтвердить что ты не робот

Как я могу прочитать содержимое URL-адреса с помощью Python?

Следующее работает, когда я вставляю его в браузер:

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

Но когда я пытаюсь прочитать URL-адрес с Python, ничего не происходит:

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

Нужно ли кодировать URL-адрес, или есть что-то, чего я не вижу?

4b9b3361

Ответ 1

Чтобы ответить на ваш вопрос:

import urllib

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

Вы должны read(), а не readline()

РЕДАКТИРОВАТЬ (2018-06-25): Начиная с Python 3, устаревшая urllib.urlopen() была заменена на urllib.request.urlopen() (см. Примечания на https://docs.python.org/3/library/urllib. request.html # urllib.request.urlopen для подробной информации).

Если вы используете Python 3, посмотрите ответы Мартина Тома или INNM в этом вопросе: fooobar.com/questions/139857/... (Compath Python 2/3) fooobar.com/questions/139857/... (Python 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)

Ответ 2

Для пользователей 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, но думал, что это может сэкономить время.

Ответ 3

Решение с работами с 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)

Ответ 4

Ни один из этих ответов не очень хорош для Python 3 (проверено на последней версии на момент публикации).

Вот как ты это делаешь...

def print_some_url():
    with urllib.request.urlopen('http://mywebsiteurl') as f:
        print(f.read().decode('utf-8'))

Выше приведено для содержимого, которое возвращает 'utf-8'. Удалите .decode('utf-8'), если вы хотите, чтобы python "угадал подходящую кодировку".

Документация: https://docs.python.org/3/library/urllib.request.html#module-urllib.request

Ответ 5

URL-адрес должен быть строкой:

import urllib

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

Ответ 6

Я использовал следующий код:

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()

Ответ 7

Мы можем прочитать содержание сайта HTML, как показано ниже:

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

Ответ 8

#!/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