Форум сайта python.su
0
PooH
Как я понимаю - он выводит несколько строчек, а потом вылетает? Или наоборот до этого выводил несколько строчек, а потом вылетал, а после переделки вылетает сразу. Если так, то возвращаемся к тому, с чего я и начинал - в макете таблиц в строках разное число ячеек. Больше предположений нет, если хотите высылайте мне на почту свой скрипт и пример хтмла, посмотрю.
Офлайн
72
ruff3dНу как я и предполагал, дело в структуре документа. Внутри нужной вам таблицы есть вложенные и под ваши правила попадают и они тоже. Я немного поигрался с документом, предлагаю парсить так: берем tbody нужной таблицы по id(верстальщику привет, id “nestedView:details:data” - это думали не головным мозгом). И идем по дочерним элементам. Я вот тут накидал, вставку в базу сами прикрутите.
на почту скинул!
def print_tuple(t): for j, x in enumerate(t): print "%d:" % j, x doc = html.document_fromstring(open(r).read()) tbody = doc.cssselect('#"nestedView:details:data">tbody')[0] def get_content(td): try: return td.text_content().strip() or td.cssselect('a')[0].get('href') except IndexError: return None for i, tr in enumerate(tbody): tup = tuple(get_content(x) for x in tr) print i, "=" * 25 print_tuple(tup)
Офлайн
0
PooHruff3dНу как я и предполагал, дело в структуре документа. Внутри нужной вам таблицы есть вложенные и под ваши правила попадают и они тоже. Я немного поигрался с документом, предлагаю парсить так: берем tbody нужной таблицы по id(верстальщику привет, id “nestedView:details:data” - это думали не головным мозгом). И идем по дочерним элементам. Я вот тут накидал, вставку в базу сами прикрутите.
на почту скинул!def print_tuple(t): for j, x in enumerate(t): print "%d:" % j, x doc = html.document_fromstring(open(r).read()) tbody = doc.cssselect('#"nestedView:details:data">tbody')[0] def get_content(td): try: return td.text_content().strip() or td.cssselect('a')[0].get('href') except IndexError: return None for i, tr in enumerate(tbody): tup = tuple(get_content(x) for x in tr) print i, "=" * 25 print_tuple(tup)
Офлайн
0
Ваша ошибка состоит в том, что Вы зачем-то наращиваете значение переменной i и при этом обращаетесь всегда к первому элементу списка столбцов. Я бы переписал код вот так:
db = MySQLdb.connect(host="localhost", user="root", passwd="111111", db="base", charset='utf8') if db : print "db is ok!" cursor = db.cursor() COLUMNS = ('num', 'name', 'val', 'dom', 'kod', 'sin', 'rar') SQL = 'INSERT INTO T1 (%s) VALUES (%s)' % (', '.join(COLUMNS), ', '.join('%s' for col in xrange(len(COLUMNS)))) for tr in doc.cssselect('table tr'): tds = tr.cssselect('td') values = tuple(td.text for td in tds)[:len(COLUMNS)] cursor.execute(SQL, values)
Отредактировано dmugtasimov (Июль 29, 2012 23:11:18)
Офлайн
14
cursor.executemany()
Офлайн