Форум сайта python.su
9
Начал изучать питон, для практики написал простенький скрипт для стягивания 30 первых цитат с башорга с помощью Grab:
# -*- coding: utf-8 -*- from grab import Grab import sqlite3 g=Grab(log_file='out.html') pages=['bash.im/quote/'+str(x) for x in range(1,31)] bd_connect=sqlite3.connect('bash_im.db') bd_connect.execute('''CREATE TABLE bash_im (quote text, url text)''') def getQuote(quote_url): g.go(quote_url) return g.xpath_text('//div[@class="text"]') for page in pages: quote=[] quote.append(getQuote(page)) quote.append(page) bd_connect.execute('INSERT INTO bash_im VALUES (?,?)',quote) bd_connect.commit()
Офлайн
Вставляйте pdb в разные места программы и проверяйте, где на второй итерации по pages у вас происходит косяк. Как вариант у вас баг в методе просмотра бд и на самом деле там правильные данные вставлены.
Офлайн
9
# -*- coding: utf-8 -*- from grab import Grab import sqlite3 import pdb g=Grab(log_file='out.html') pages=['bash.im/quote/'+str(x) for x in range(1,31)] bd_connect=sqlite3.connect('bash_im.db') bd_connect.execute('''CREATE TABLE bash_im (quote text, url text)''') for page in pages: quote=[] pdb.set_trace() g.go(page) quote.append(g.xpath_text('//div[@class="text"]')) quote.append(page) bd_connect.execute('INSERT INTO bash_im VALUES (?,?)',quote) bd_connect.commit()
Офлайн
Что такой код выводит?
# -*- coding: utf-8 -*- from grab import Grab import sqlite3 import pdb g=Grab(log_file='out.html') pages=['bash.im/quote/'+str(x) for x in range(1,31)] bd_connect=sqlite3.connect('bash_im.db') bd_connect.execute('''CREATE TABLE bash_im (quote text, url text)''') for page in pages: quote=[] pdb.set_trace() print 'PAGE', page g.go(page) print 'TEXt', g.xpath_text('//div[@class="text"]') quote.append(g.xpath_text('//div[@class="text"]')) quote.append(page) bd_connect.execute('INSERT INTO bash_im VALUES (?,?)',quote) bd_connect.commit()
Офлайн
9
lorienhttp://pastebin.com/cTG692UT
Что такой код выводит?
Офлайн
Запустил ваш код. Т.к. Вы формируете адреса без "http://" префикса, то граб считает их относительными адресами, поэтому после первого запроса к bash.im/quote/1, далее он сделал запрос к bash.im/quote/bash.im/quote/2 и так далее.
Офлайн
9
lorienСпасибо.
Запустил ваш код. Т.к. Вы формируете адреса без "http/" префикса, то граб считает их относительными адресами, поэтому после первого запроса к bash.im/quote/1, далее он сделал запрос к bash.im/quote/bash.im/quote/2 и так далее.
Офлайн
0
Я написал парсер bash.im, если интересно, вот ссылка:
https://github.com/aruseni/bash.im-parser
Офлайн