Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
но его багафича отбила всякое желание делать что-то дальше: groups.google.com/group/scrapy-users/browse_thread/thread/5092eb5cc8695f2a/aa36618c58c539ec
hxs.select('//div[@class="thumb"]').extract()[0] медленнее чем hxs.select('//div[@class="thumb" and position() = 1]').extract()[0] все равно что ругаться на то, что db.query("SELECT * FROM my_huge_table")[0] медленнее чем db.query("SELECT * FROM my_huge_table LIMIT 1")[0]from scrapy.selector import HtmlXPathSelector
hxs = HtmlXpathSelector(text=page_body)# -*- coding: utf-8 -*-
import time
from scrapy.selector import HtmlXPathSelector
import urllib
from lxml.html import fromstring
data = urllib.urlopen('http://tubesexclips.com/').read()
start = time.time()
hxs = HtmlXPathSelector(text=data)
scrapy_results = set()
for elem in hxs.select('//div[@class="added-download"]/a'):
href, text = elem.select('@href').extract()[0], elem.select('text()').extract()[0]
scrapy_results.add((href, text))
print 'HtmlXpathSelector: %.2f' % (time.time() - start)
start = time.time()
tree = fromstring(data)
lxml_results = set()
for elem in tree.xpath('//div[@class="added-download"]/a'):
href, text = elem.xpath('@href')[0], elem.xpath('text()')[0]
lxml_results.add((href, text))
print 'lxml: %.2f' % (time.time() - start)
print 'Equal: %s' % (scrapy_results == lxml_results)
lorien@athlon:/web/barn$ python speed3.py
HtmlXpathSelector: 0.75
lxml: 0.02
Equal: True
from scrapy.conf import settings
settings['SELECTORS_BACKEND'] == 'lxml'def task_initial(...):
#... parse page ...
self.pages[url] = common_data
self.counters[url] = len(images_list)
for img in images_list:
yield Task('save_img', grab=grab, shared_data={'page_url': url})
def task_save_img(...):
# ... store image, generate thumb ...
self.counters[page_url] -= 1
if self.counters[page_url] == 0:
self.generate_my_page(self.pages[page_url])from lxml.html import fromstring
from BeautifulSoup import BeautifulSoup
import time
import urllib
data = urllib.urlopen('http://habrahabr.ru').read()
start = time.time()
for x in xrange(10):
tree = BeautifulSoup(data)
print tree.find('title').text
print 'BeautifulSoup: %.2f' % (time.time() - start)
start = time.time()
for x in xrange(10):
tree = fromstring(data)
print tree.xpath('//title')[0].text
print 'lxml: %.2f' % (time.time() - start)
>>> from lxml.cssselect import CSSSelector
>>> sel = CSSSelector('div.content')
>>> sel.path
"descendant-or-self::div[contains(concat(' ', normalize-space(@class), ' '), ' content ')]"
Фреймворк для парсинга Grab:Spider