У меня есть сайты в БД я хочу ползать последовательно, то есть:Ползающие домены серийно Scrapy
- Добавить домен в список разрешенных доменов (должно быть пустым).
- Добавить этот домен для запроса (добавление
http://
к нему отлично работает). - Сканировать запрос, касающийся разрешенных доменов.
- Переход к следующему домену, добавьте его только в список разрешенных доменов. Там будет единственный, так что крест-крест не произойдет. Примечание: criss-cross question не помог мне, но, может быть, мне что-то не хватает ...
- Сканировать этот запрос.
- Завершить все области, которые у меня есть - серийно.
То, что я достиг до сих пор, - это сканирование доменов, это отличная работа, она полна запросов. Единственная проблема, с которой я столкнулся, заключается в том, что allowed_domains
, кажется, не обновляется, он просматривает всевозможные сайты.
Я поставил DEPTH_LIMIT=1
поэтому он не будет бесконечным ползать, и я также добавил DF ползать и не BF ползать:
DEPTH_LIMIT= 1
SCHEDULER_DISK_QUEUE = 'scrapy.squeues.PickleFifoDiskQueue'
SCHEDULER_MEMORY_QUEUE = 'scrapy.squeues.FifoMemoryQueue'
Вот код моего паука (только начало, так как вы не» т действительно заботится о моей обработке пункта ...):
from __future__ import with_statement
import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.http.request import Request
from company.items import CompanyItem, UrlItem
from urlparse import urlparse
import MySQLdb
import json
class RecipeSpider(CrawlSpider):
name = "company"
allowed_domains = []
start_urls = []
rules = (Rule(LinkExtractor(allow=(), deny=(), tags=('a', 'link', 'li' 'area')), callback='extract_raw_recipe', follow=True),)
def start_requests(self):
# print "before sources"
sources = self.get_allowed_domains()
dummy_tuple = (long(len(sources) + 1), u'dummy', None, None, None, None, None, 0L, long(len(sources) + 1),)
final_sources = sources + (dummy_tuple,)
for source in final_sources:
self.allowed_domains = [str(source[1])]
url_string = str("http://" + source[1])
self.start_urls = [url_string]
self.update_running_source(source)
yield Request(url_string, self.extract_raw_recipe)
### start_requests()
def extract_raw_recipe(self, response):
pass
код extract_raw_recipe
не имеет никаких запросов или разбор следующий URL-адрес, он просто работает, поэтому нет необходимости редактировать его. Но если мне нужно что-то добавить, скажите мне, потому что, возможно, это недостающее звено. Текущий код добавляет словарь к элементу, а затем помещает этот элемент в БД.
Итак, в заключение: что мне нужно добавить, чтобы он мог фильтровать домены каждый раз, когда он просканирует запрос?
Пожалуйста, дайте мне знать, если есть необходимость предоставить больше кода.
Извините, только сейчас у вас было время и ресурсы, чтобы прочитать ваш ответ. Ничего себе, мне много о чем подумать и подумать, спасибо вам большое, попробуем и обновим. –
Пробовал это, он отлично поработал, чтобы отделить запросы и позволить обработать каждый участок в отдельном потоке. –
хотел бы увидеть обновление вашего кода – wprins