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

Как читать html с URL-адреса в python 3

Я просмотрел предыдущие подобные вопросы и стал еще более запутанным.

В python 3.4, я хочу прочитать html-страницу как строку, учитывая url.

В perl я делаю это с помощью LWP:: Simple, используя get().

Пример matplotlib 1.3.1 говорит: import urllib; u1=urllib.urlretrieve(url). python3 не может найти urlretrieve.

Я попробовал u1 = urllib.request.urlopen(url), который, как представляется, получает объект HTTPResponse, но я не могу его распечатать или получить длину или проиндексировать его.

u1.body не существует. Я не могу найти описание HTTPResponse в python3.

Есть ли атрибут в объекте HTTPResponse, который даст мне необработанные байты html-страницы?

(Неприемлемые вещи из других вопросов включают urllib2, который не существует в моих python, csv parsers и т.д.)

Edit:

Я нашел что-то в предыдущем вопросе, который частично (в основном) выполняет работу:

u2 = urllib.request.urlopen('http://finance.yahoo.com/q?s=aapl&ql=1')

for lines in u2.readlines():
    print (lines)

Я говорю "частично", потому что я не хочу читать отдельные строки, но только одну большую строку.

Я мог бы просто конкатенировать строки, но каждая напечатанная строка имеет знак "b", добавленный к ней.

Откуда это взялось?

Опять же, я полагаю, что я мог удалить первый символ перед конкатенацией, но это становится kloodge.

4b9b3361

Ответ 1

Обратите внимание, что Python3 не читает код html как строку, а как bytearray, поэтому вам нужно преобразовать его в один с decode.

import urllib.request

fp = urllib.request.urlopen("http://www.python.org")
mybytes = fp.read()

mystr = mybytes.decode("utf8")
fp.close()

print(mystr)

Ответ 2

Попробуйте модуль "запросы", он намного проще.

#pip install requests for installation

import requests

url = 'https://www.google.com/'
r = requests.get(url)
r.text

больше информации здесь> http://docs.python-requests.org/en/master/

Ответ 3

urllib.request.urlopen(url).read() должен вернуть вам необработанную HTML-страницу в виде строки.

Ответ 4

import requests

url = requests.get("http://yahoo.com")
htmltext = url.text
print(htmltext)

Это будет похоже на urllib.urlopen.

Ответ 5

Чтение html-страницы с urllib довольно просто. Поскольку вы хотите прочитать его как одну строку, я покажу вам.

Импортировать urllib.request:

#!/usr/bin/python3.5

import urllib.request

Подготовьте наш запрос

request = urllib.request.Request('http://www.w3schools.com')

Всегда используйте "try/except" при запросе веб-страницы, так как все может пойти не так. urlopen() запрашивает страницу.

try:
    response = urllib.request.urlopen(request)
except:
    print("something wrong")

Тип - отличная функция, которая сообщит нам, что такое "тип" переменной. Здесь ответ - это объект http.response.

print(type(response))

Функция чтения для нашего объекта ответа будет хранить html как байты для нашей переменной. Снова type() проверит это.

htmlBytes = response.read()

print(type(htmlBytes))

Теперь мы используем функцию декодирования для нашей байтовой переменной, чтобы получить одну строку.

htmlStr = htmlBytes.decode("utf8")

print(type(htmlStr))

Если вы хотите разбить эту строку на отдельные строки, вы можете сделать это с помощью функции split(). В этой форме мы можем легко перебирать всю страницу или выполнять любую другую обработку.

htmlSplit = htmlStr.split('\n')

print(type(htmlSplit))

for line in htmlSplit:
    print(line)

Надеюсь, это даст немного более подробный ответ. Документация и учебные пособия Python великолепны, я бы использовал это как ссылку, потому что он будет отвечать на большинство вопросов, которые могут возникнуть.

Ответ 6

import urllib
some_url = 'https://docs.python.org/2/library/urllib.html'
filehandle = urllib.urlopen(some_url)
print filehandle.read()