Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 3, 2013 15:01:53

alexsis
Зарегистрирован: 2013-07-26
Сообщения: 148
Репутация: +  9  -
Профиль   Отправить e-mail  

Стянуть цитаты с bash.im

Начал изучать питон, для практики написал простенький скрипт для стягивания 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

Офлайн

#2 Сен. 3, 2013 15:47:00

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Стянуть цитаты с bash.im

Вставляйте pdb в разные места программы и проверяйте, где на второй итерации по pages у вас происходит косяк. Как вариант у вас баг в методе просмотра бд и на самом деле там правильные данные вставлены.

Офлайн

#3 Сен. 4, 2013 13:04:01

alexsis
Зарегистрирован: 2013-07-26
Сообщения: 148
Репутация: +  9  -
Профиль   Отправить e-mail  

Стянуть цитаты с bash.im

# -*- 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

Офлайн

#4 Сен. 4, 2013 17:32:51

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Стянуть цитаты с bash.im

Что такой код выводит?

# -*- 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()

Офлайн

#5 Сен. 5, 2013 21:00:49

alexsis
Зарегистрирован: 2013-07-26
Сообщения: 148
Репутация: +  9  -
Профиль   Отправить e-mail  

Стянуть цитаты с bash.im

lorien
Что такой код выводит?
http://pastebin.com/cTG692UT
Все тоже самое, после первой стягивается последняя цитата.

Офлайн

#6 Сен. 6, 2013 09:56:00

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Стянуть цитаты с bash.im

Запустил ваш код. Т.к. Вы формируете адреса без "http://" префикса, то граб считает их относительными адресами, поэтому после первого запроса к bash.im/quote/1, далее он сделал запрос к bash.im/quote/bash.im/quote/2 и так далее.

Офлайн

#7 Сен. 7, 2013 17:23:31

alexsis
Зарегистрирован: 2013-07-26
Сообщения: 148
Репутация: +  9  -
Профиль   Отправить e-mail  

Стянуть цитаты с bash.im

lorien
Запустил ваш код. Т.к. Вы формируете адреса без "http/" префикса, то граб считает их относительными адресами, поэтому после первого запроса к bash.im/quote/1, далее он сделал запрос к bash.im/quote/bash.im/quote/2 и так далее.
Спасибо.

Офлайн

#8 Окт. 6, 2014 21:57:32

aruseni
Зарегистрирован: 2014-10-06
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Стянуть цитаты с bash.im

Я написал парсер bash.im, если интересно, вот ссылка:

https://github.com/aruseni/bash.im-parser

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version