Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 14, 2011 13:33:12

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

По scrapy подскажите.

Пытаюсь прописать правила пауку(CrawlSpider), не могу понять как.
Есть стартовая url, есть регулярка - regex. Нужно зайти на стартовую урл, затем переходить по ссылкам подходящим под регулярки и эти страницы сохранять.

Делаю так: Rule(SgmlLinkExtractor(allow=(regex))). Краулер просто бегает по ссылкам ничего не сохраняя. Делаю так: Rule(SgmlLinkExtractor(allow=(regex)),, callback='parse_item'), он сохраняет все ссылки со стартовой страницы, но не бегает по ссылкам. Пробовал различные комбинации этих правил а также параметра follow=True, не добился результата, как надо то правильно?



Офлайн

#2 Апрель 15, 2011 08:26:13

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

По scrapy подскажите.

С этим разобрался, проблема была в том, что на этих ссылках был редирект - 301. А scrapy по ним не переходит. Нашел следующее решение
http://groups.google.com/group/scrapy-users/browse_thread/thread/a61646c7e1bc0c53 но после него scrapy стал сохранять пустые страницы, на которых 301й редирект, а не переходить по ним. Как его заставить переходить по редиректам то? Уже всё обгуглил, в документации не нашел. Никто не пользовался этим фреймворком?



Офлайн

#3 Апрель 15, 2011 11:04:44

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

По scrapy подскажите.

c handle_httpstatus_list автор совета по-моему погорячился, попробуй убрать

Офлайн

#4 Апрель 15, 2011 12:11:53

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

По scrapy подскажите.

Нет, тогда вообще никаких не сохраняет.



Офлайн

#5 Апрель 15, 2011 12:14:49

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

По scrapy подскажите.

Вот весь код spider'a с костылем который исправляет мою проблему:

# -*- coding:utf8 -*-

import re,urllib2

#from abitur.items import AbiturItem
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.contrib.spiders import CrawlSpider
from scrapy.contrib.spiders import Rule


class AbiturSpider(CrawlSpider):

name = "abitur"
allowed_domains = ["www.bizrate.com"]
start_urls = ["http://www.bizrate.com/outdoor-games-fun/"]
handle_httpstatus_list = [301, 302, 303]

rules = (
Rule(SgmlLinkExtractor(allow=('index__start--.*?')),follow=True),
Rule(SgmlLinkExtractor(allow=('index__ctr_brand.*?')), callback='parse_item'),
)

def parse_item(self, response):
url = response.headers['Location']
resp = urllib2.urlopen(url)
filename = resp.url.split("/")[-1]+".html"
open("result/"+filename, 'wb').write(resp.read())
Но всё-таки хочу, чтобы мой spider ходил по редиректам.



Отредактировано (Апрель 15, 2011 12:15:12)

Офлайн

#6 Апрель 18, 2011 10:38:58

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

По scrapy подскажите.

эм, а чего не с response.meta достаёшь?
глянь код самой мидлвари http://dev.scrapy.org/browser/scrapy/contrib/downloadermiddleware/redirect.py

Офлайн

#7 Июль 25, 2012 11:53:31

nuklea
От:
Зарегистрирован: 2009-12-05
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

По scrapy подскажите.

У меня сейчас точно такая же проблема.

2012-07-25 16:52:31+0800 [aliexpress] DEBUG: Redirecting (301) to <GET http://www.aliexpress.com/category/200000361/transporting-storage.html> from <GET http://www.aliexpress.com/category/200000361/Transporting-Storage.html>
2012-07-25 16:52:37+0800 [aliexpress] DEBUG: Redirecting (301) to <GET http://www.aliexpress.com/category/200000321/tools-maintenance-care.html> from <GET http://www.aliexpress.com/category/200000321/Tools-Maintenance-Care.html>



Офлайн

#8 Июль 25, 2012 17:02:42

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

По scrapy подскажите.

nuklea
без примера кода, в решении “точно такой же проблемы” вам вряд ли кто-то поможет

Офлайн

#9 Июль 26, 2012 05:53:01

nuklea
От:
Зарегистрирован: 2009-12-05
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

По scrapy подскажите.

slav0nic
nuklea
без примера кода, в решении “точно такой же проблемы” вам вряд ли кто-то поможет

Да, конечно.

class AliexpressSpider(CrawlSpider):
    name = 'aliexpress'
    allowed_domains = ['www.aliexpress.com']
    start_urls = ['http://www.aliexpress.com/all-wholesale-products.html']
    rules = [Rule(SgmlLinkExtractor([r'/category/(\d+)/.+\.html$']), 'parse_category')]
    def parse_category(self, response):
        // Код по разбору страницы
        return l.load_item()

Вывод:

2012-07-25 18:05:59+0800 [scrapy] INFO: Scrapy 0.14.4 started (bot: Grabber)
2012-07-25 18:05:59+0800 [scrapy] DEBUG: Enabled extensions: LogStats, TelnetConsole, CloseSpider, CoreStats, MemoryUsage, SpiderState
2012-07-25 18:05:59+0800 [scrapy] DEBUG: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, RedirectMiddleware, CookiesMiddleware, HttpCompressionMiddleware, ChunkedTransferMiddleware, DownloaderStats
2012-07-25 18:05:59+0800 [scrapy] DEBUG: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware
2012-07-25 18:05:59+0800 [scrapy] DEBUG: Enabled item pipelines: CategoryFiltersPipeline, SaveCategoryPipeline
2012-07-25 18:05:59+0800 [aliexpress] INFO: Spider opened
2012-07-25 18:05:59+0800 [aliexpress] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2012-07-25 18:05:59+0800 [scrapy] DEBUG: Telnet console listening on 0.0.0.0:6023
2012-07-25 18:06:00+0800 [aliexpress] DEBUG: Crawled (200) <GET http://www.aliexpress.com/all-wholesale-products.html> (referer: None)
2012-07-25 18:06:02+0800 [aliexpress] DEBUG: Crawled (200) <GET http://www.aliexpress.com/category/3/apparel-accessories.html> (referer: http://www.aliexpress.com/all-wholesale-products.html)
2012-07-25 18:06:08+0800 [aliexpress] DEBUG: Scraped from <200 http://www.aliexpress.com/category/3/apparel-accessories.html>
{'filters': {},
'item_id': 3,
'orig_name': u'Apparel & Accessories',
'remote_url': 'http://www.aliexpress.com/category/3/apparel-accessories.html',
'uri': u'apparel-accessories'}
2012-07-25 18:06:23+0800 [aliexpress] DEBUG: Redirecting (301) to <GET http://www.aliexpress.com/category/200000369/car-electronics.html> from <GET http://www.aliexpress.com/category/200000369/Car-Electronics.html>
2012-07-25 18:06:56+0800 [aliexpress] DEBUG: Redirecting (301) to <GET http://www.aliexpress.com/category/200000361/transporting-storage.html> from <GET http://www.aliexpress.com/category/200000361/Transporting-Storage.html>
2012-07-25 18:07:02+0800 [aliexpress] DEBUG: Redirecting (301) to <GET http://www.aliexpress.com/category/200000321/tools-maintenance-care.html> from <GET http://www.aliexpress.com/category/200000321/Tools-Maintenance-Care.html>
2012-07-25 18:07:02+0800 [aliexpress] INFO: Crawled 2 pages (at 2 pages/min), scraped 1 items (at 1 items/min)
2012-07-25 18:07:04+0800 [aliexpress] DEBUG: Redirecting (301) to <GET http://www.aliexpress.com/category/200000165/car-accessories.html> from <GET http://www.aliexpress.com/category/200000165/Car-Accessories.html>
2012-07-25 18:07:31+0800 [aliexpress] DEBUG: Redirecting (301) to <GET http://www.aliexpress.com/category/200000191/replacement-parts.html> from <GET http://www.aliexpress.com/category/200000191/Car-Styling-Parts.html>



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version