Raf*_*fal 1 python scheduled-tasks scrapy scrapy-pipeline
几天来我一直在试图弄清楚如何安排我的 scrapy 蜘蛛,但没有任何运气。(我尝试了从 Windows 任务计划程序到 scrapy-do lib 的所有内容,但在我的MAIN.PY上没有任何效果)
(我的主要目标是安排我的蜘蛛每 5 分钟从我的蜘蛛NewsSpider收集数据到 mySQL news_db数据库)
请查看我的脚本,因为它有所修改,并根据需要进行更改。我真的希望这个能发挥作用。
主程序.PY
from scrapy import cmdline
cmdline.execute("scrapy crawl news".split())
Run Code Online (Sandbox Code Playgroud)
新闻_蜘蛛.PY
import scrapy
from ..items import WebspiderItem
class NewsSpider(scrapy.Spider):
name = 'news'
start_urls = [
'https://www.coindesk.com/feed'
]
def parse(self, response):
pub_date = response.xpath('//pubDate/text()').extract()[0]
page_title = response.xpath('//title/text()').extract()[2]
page_summary = response.xpath('//description/text()').extract()[1]
text_link = response.xpath('//link/text()').extract()[2]
item = WebspiderItem()
item['date'] = pub_date
item['title'] = page_title
item['summary'] = page_summary
item['link'] = text_link
yield item
Run Code Online (Sandbox Code Playgroud)
项目.PY
import scrapy
class WebspiderItem(scrapy.Item):
# define the fields for your item here like:
date = scrapy.Field()
title = scrapy.Field()
summary = scrapy.Field()
link = scrapy.Field()
Run Code Online (Sandbox Code Playgroud)
管道.PY
import mysql.connector
class WebspiderPipeline(object):
def __init__(self):
self.create_connection()
def create_connection(self):
self.conn = mysql.connector.connect(
host='localhost',
user='root',
passwd='passordpassord',
database='news_db'
)
self.curr = self.conn.cursor()
def process_item(self, item, spider):
self.store_db(item)
return item
def store_db(self, item):
self.curr.execute("""insert into news_tb values (%s, %s, %s, %s)""", (
item['date'],
item['title'],
item['summary'],
item['link']
))
self.conn.commit()
Run Code Online (Sandbox Code Playgroud)
使用计划包在本地 Windows 和 Linux 服务器上都对我有用。只需使用pip install schedule. 然后通过将以下内容粘贴到文件中来设置新作业main.py:
import schedule
import time
import os
print('Scheduler initialised')
schedule.every(5).minutes.do(lambda: os.system('scrapy crawl news'))
print('Next job is set to run at: ' + str(schedule.next_run()))
while True:
schedule.run_pending()
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
python main.py然后在终端中运行。scrapy crawl news只要您不关闭终端,脚本就会每 5 分钟运行一次该命令。
请注意,据我记得,使用os.system()而不是因为在作业完成时退出调度程序的无限 while 循环非常重要。不会执行此操作,因此将在又过了 5 分钟后等待另一个作业运行。cmdline.execute()cmdline.execute()os.system()
| 归档时间: |
|
| 查看次数: |
3109 次 |
| 最近记录: |