Найти - Пользователи
Полная версия: Стянуть цитаты с bash.im
Начало » Python для новичков » Стянуть цитаты с bash.im
1
alexsis
Начал изучать питон, для практики написал простенький скрипт для стягивания 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()

Скрипт нормально стягивает первую цитату, а вместо остальных цитат последнюю.
т.е. в базе получается что-то такое: http://pastebin.com/5VSJkZyJ

lorien
Вставляйте pdb в разные места программы и проверяйте, где на второй итерации по pages у вас происходит косяк. Как вариант у вас баг в методе просмотра бд и на самом деле там правильные данные вставлены.
alexsis
# -*- 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()
Проверял код с помощью pdb, не помогло. Не понимаю, почему стягивается последняя цитата.
http://pastebin.com/NEBUpxRC
lorien
Что такой код выводит?
# -*- 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()
alexsis
lorien
Что такой код выводит?
http://pastebin.com/cTG692UT
Все тоже самое, после первой стягивается последняя цитата.
lorien
Запустил ваш код. Т.к. Вы формируете адреса без "http://" префикса, то граб считает их относительными адресами, поэтому после первого запроса к bash.im/quote/1, далее он сделал запрос к bash.im/quote/bash.im/quote/2 и так далее.
alexsis
lorien
Запустил ваш код. Т.к. Вы формируете адреса без "http/" префикса, то граб считает их относительными адресами, поэтому после первого запроса к bash.im/quote/1, далее он сделал запрос к bash.im/quote/bash.im/quote/2 и так далее.
Спасибо.
aruseni
Я написал парсер bash.im, если интересно, вот ссылка:

https://github.com/aruseni/bash.im-parser
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