Найти - Пользователи
Полная версия: разный результат под разными платформами
Начало » Python для новичков » разный результат под разными платформами
1 2
lorien
Ну и? Разбирайтесь почему. Нужный элемент есть в скачанном HTML?
Скачивайте с помощью urllib, а не lxml
asphix
вот живой код для проверки:

#!/usr/local/bin/python3
from lxml import html
HTMLtree = html.parse("http://www.pleer.ru/cifrovye-fotoapparaty~69.html")
name = HTMLtree.xpath("//h1[@class='disableH1']/text()")
print("name={0}".format(name))
asphix
lorien
Скачивайте с помощью urllib, а не lxml

но это же бред.. Почему один и тот же код с одной и той же библиотекой на разных платформах по разному работает?
py.user.next
asphix
'csv\{0}.csv'.format(p_filename)
лучше проэкранируй бекслеш

asphix
cameras = {'pos1':62,
           'pos2':69,
           'pos3':157,
           'pos4':44,
           'pos5':19,
           'pos6':2,
           'pos7':45,
           'pos8':11,
           'pos9':1}
    """ code """
    for cam in cameras:
комментируй через #, тройные кавычки как комментарий - для docstring
думаешь, ключи словаря будут перебираться по порядку ?

у тебя функция сохранения использует один разделитель каталогов, тогда как они разные

прежде, чем сохранять в файл, вставь строку, которая на экране будет отображать подготовленные данные
было:
    for cam in cameras:
        s_lines = parse(url.format(cameras[cam]))
        save_csv("{0}_{1}".format(cam, len(s_lines)), s_lines)
стало:
    for cam in cameras:
        s_lines = parse(url.format(cameras[cam]))
        print('parts:', cam, cameras[cam], url)
        print('joined1:', url.format(cameras[cam]))
        print('joined2:', "{0}_{1}".format(cam, len(s_lines)))
        print('list:', s_lines)
        input()
        save_csv("{0}_{1}".format(cam, len(s_lines)), s_lines)
asphix
py.user.next
лучше проэкранируй бекслеш
под никсами путь выглядит как ‘csv/{0}.csv’ - экранировка не обязательна. Для винды да, заэкранил.

py.user.next
комментируй через #, тройные кавычки как комментарий - для docstring
спасибо, поправил

py.user.next
думаешь, ключи словаря будут перебираться по порядку ?
нет, не думаю. В моём случае порядок не принципиален.

py.user.next
у тебя функция сохранения использует один разделитель каталогов, тогда как они разные
каталог один, в нём разные файлы.

py.user.next
прежде, чем сохранять в файл, вставь строку, которая на экране будет отображать подготовленные данные
принципиально это ничего не изменило.. содержимое списка пустое..

Подозреваю, что дело в lxml, т.к. простейший код возвращает пустой список, тогда как на винде возвращает значение:
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
from lxml import html
HTMLtree = html.parse("http://www.pleer.ru/cifrovye-fotoapparaty~69.html")
name = HTMLtree.xpath("//h1[@class='disableH1']/text()")
print "name=%s" % name


З.Ы.: изначально в системе стоял python 2.5.2, поставил под него lxml, потом поставил сверху python 3.2.3 и пересобрал lxml (python3 setup.py install)

может быть с этими манипуляциями что-то связано?
py.user.next
эту страницу скачай и сохрани в виде файла
открой интерпретатор третьего питона
импортируй lxml.etree и сделай дерево
к дереву применяй xpath, пока не получишь список
после этого переделаешь на скачивание
asphix
пока что одинаковый результат под любой системой дал следующий вариант:

from lxml import html
from urllib.request import urlopen
url = "http://www.pleer.ru/cifrovye-fotoapparaty~69.html"
page = urlopen(url).read()
doc = html.document_fromstring(page)
name = doc.xpath("//h1[@class='disableH1']/text()")
print("name={0}".format(name).encode('utf-8'))
py.user.next
asphix
print("name={0}".format(name).encode('utf-8'))
что это за .encode() ?

asphix
под никсами путь выглядит как ‘csv/{0}.csv’ - экранировка не обязательна. Для винды да, заэкранил.
путь нужно склеивать через os.path.join(), тогда это будет переносимо

ещё пример
page.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Html File</title>
</head>
<body>
<ul>
<li>Ref1:<br>
<a href="http://www.site1.com">Site1</a>
<li>Ref2:<br>
<a href="http://www.site2.com">Site2</a>
<li>Ref3:<br>
<a href="http://www.site3.com">Site3 a&copy;b&#0064;c</a>
</ul>
</body>
</html>

поиск ссылок
>>> import lxml.html
>>> with open('page.html') as fin:
...     tree = lxml.html.parse(fin) # подать можно имя файла или файловый объект
...     tree.xpath("//a")
...     for node in tree.xpath("//a"):
...         print node.text, '->', node.attrib['href']
...     tree.xpath("//a/text()")
...     tree.xpath("//a/@href")
... 
[<Element a at b73e2e3c>, <Element a at b73e2e6c>, <Element a at b73e2e9c>]
Site1 -> http://www.site1.com
Site2 -> http://www.site2.com
Site3 a©b@c -> http://www.site3.com
['Site1', 'Site2', u'Site3 a\xa9b@c']
['http://www.site1.com', 'http://www.site2.com', 'http://www.site3.com']
>>>
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