Найти - Пользователи
Полная версия: Парсинг сайта
Начало » Python для новичков » Парсинг сайта
1 2
Stepe
Добрый день.
Я только учусь писать на Python и у меня возник следующий вопрос: на данный момент я пишу код для парсинга сайта rp5.ru Суть данного кода заключается в том что бы скачивать информацию о погоде.
Но у меня абсолютно не получается, если вы поможете мне разобраться буду очень благодарен. Вот код:
import lxml.html
import io
from urllib import request
import requests
from urllib.parse import urljoin
from lxml.html import fromstring
url = "http://rp5.ru/%D0%9F%D0%BE%D0%B3%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%9A%D1%80%D0%B0%D1%81%D0%BD%D0%BE%D0%B4%D0%B0%D1%80%D0%B5,_%D0%9A%D1%80%D0%B0%D1%81%D0%BD%D0%BE%D0%B4%D0%B0%D1%80%D1%81%D0%BA%D0%B8%D0%B9_%D0%BA%D1%80%D0%B0%D0%B9"
http_proxy = "http://R_VG:Zd213HYr@10.5.45.250:3128"
proxyDict = { 
             
              "http" : http_proxy
              
            }
 
r = requests.get(url,  proxies=proxyDict)
html= fromstring(r.content)
temp= html.xpath("//div[@class='t_0']/a/text()")[0]

И вот такую ошибку он мне выдает :

Traceback (most recent call last):
  File "C:/Python32/xd", line 18, in <module>
    html= fromstring(r.content)
  File "C:\Python32\lib\site-packages\lxml\html\__init__.py", line 630, in fromstring
    if start.startswith('<html') or start.startswith('<!doctype'):
TypeError: expected an object with the buffer interface
4kpt
Что это вообще такое???

import lxml.html
import io
from urllib import request
import requests
from urllib.parse import urljoin
from lxml.html import fromstring

Строка 1 - Вы импортируете модуль lxml.html
Строка 6 - вы опять импортируете модуль и добавляете в пространство имен fromstring.
Зачем двойной импорт? Если Вы импортировали уже этот модуль, то можете просто вызвать:

html= lxml.html.fromstring(r.content)

Либо, если Вам не нужны остальные функции (т.е. методы lxml.html), то тогда сразу

from lxml.html import fromstring

Без первой строки.

Далее.

Зачем дважды импортировать urllib. Можно один раз.
Автоматом отпадет необходимость в Строке 5.

Теперь urljoin можно будет вызвать опять через явное указание

res = urllib.parse.urljoin....

Короче. В итоге список импортов превращается в

import lxml.html
import io
import urllib
import requests

Еще есть вопрос про рациональность одновременного использования urllib и requests…

P.S. Есть документация по lxml. Если надо, пишите. Кстати, статья на русском Ссылочка.
P.S.S. По urllib хорошо написано у Бизли Д. “Python. Подробный справочник”.

Рекомендую это все предварительно прочитать :)
Stepe
4kpt
Спасибо большое за ссылке, обязательно почитаю.
У меня самая большая беда, в том что у меня подключение идет через прокси сервер, и я не совсем понимаю правильно ли я с ним работаю, почитав литературу в интернете не очень получилось разобраться, вы не подскажете нет ли у меня в этом ошибки?
myarik
Посмотрите в сторону библиотеки Grab.
lorien
from grab import Grab
g = Grab()
g.setup(proxy='http://R_VG:Zd213HYr@10.5.45.250:3128')
g.go('http://rp5.ru/%D0%9F%D0%BE%D0%B3%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%9A%D1%80%D0%B0%D1%81%D0%BD%D0%BE%D0%B4%D0%B0%D1%80%D0%B5,_%D0%9A%D1%80%D0%B0%D1%81%D0%BD%D0%BE%D0%B4%D0%B0%D1%80%D1%81%D0%BA%D0%B8%D0%B9_%D0%BA%D1%80%D0%B0%D0%B9')
print g.doc.select('//span[@class="t_0"]').text()
Stepe
Спасибо большое, но при выполнении этого скрипта, в строке print g.doc.select('//span').text()
подсвечивает g красным, и пишет invalid syntax.
Из-за чего это может быть?
4kpt
Какой питон?
Stepe
3.2
4kpt
print(g.doc.select('//span[@class="t_0"]').text())
Stepe
Теперь все еще веселее Выдает следующую ошибку…
Traceback (most recent call last):
  File "C:/Python32/Lib/45", line 1, in <module>
    from grab import Grab
ImportError: No module named grab
Traceback (most recent call last):
** IDLE Internal Exception: 
  File "idlelib\run.py", line 98, in main
    ret = method(*args, **kwargs)
  File "idlelib\run.py", line 306, in runcode
    jit = self.rpchandler.console.getvar("<<toggle-jit-stack-viewer>>")
  File "idlelib\rpc.py", line 558, in __getattr__
    raise AttributeError(name)
AttributeError: getvar
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB