Django crawler просто соскабливает первую страницу
У меня есть краулер, который прекрасно работает на простом Python, но при запуске его на Django внутри приложения он захватывает только ссылки с первой страницы.
Для запуска краулера я выполняю celery -A src worker -l INFO
.
Есть идеи, почему он начинает работать, но внезапно останавливается? Может быть, это проблема Django?
Редактирование: Вот проект:
|-- CrawlerWebsite\ Website
| |-- crawled.txt
| `-- queue.txt
|-- celery.log
|-- celerybeat-schedule.db
|-- db.sqlite3
|-- manage.py
|-- requirements.txt
|-- scraper
| |-- __init__.py
| |-- admin.py
| |-- apps.py
| |-- migrations
| | |-- 0001_initial.py
| | |-- __init__.py
| |-- models
| | |-- __init__.py
| | `-- models.py
| |-- spyder
| | |-- __init__.py
| | |-- domain.py
| | |-- general.py
| | |-- link_finder.py
| | `-- spider.py
| |-- tasks.py
| |-- tests.py
| |-- urls.py
| `-- views.py
|-- src
| |-- __init__.py
| |-- asgi.py
| |-- celery.py
| |-- settings.py
| |-- urls.py
| `-- wsgi.py
`-- templates
`-- index.html
tasks.py
вызывает весь spyder
модуль, содержащий программу (в модулях)
from celery import shared_task
import threading
from queue import Queue
from scraper.spyder import domainTool, fileTool, Spider
from .models.models import Portal, urlList
PROJECT_NAME = 'Website to crawl'
HOMEPAGE = 'https://www.examplesite.com'
DOMAIN_NAME = domainTool.get_domain_name(HOMEPAGE)
QUEUE_FILE = PROJECT_NAME + '/queue.txt'
CRAWLED_FILE = PROJECT_NAME + '/crawled.txt'
NUMBER_OF_THREADS = 8
queue = Queue()
Spider(PROJECT_NAME, HOMEPAGE, DOMAIN_NAME)
@shared_task
def create_workers():
for _ in range(NUMBER_OF_THREADS):
t = threading.Thread(target=work)
t.daemon = True
t.start()
def work():
while True:
url = queue.get()
Spider.crawl_page(threading.current_thread().name, url)
queue.task_done()
def create_jobs():
for link in fileTool.file_to_set(QUEUE_FILE):
queue.put(link)
queue.join()
crawl()
@shared_task
def crawl():
queued_links = fileTool.file_to_set(QUEUE_FILE)
if len(queued_links) > 0:
print(str(len(queued_links)) + ' links in the queue')
create_jobs()