0

以下に示すようなスパイダーのスクレイピープロジェクトがあります。このスパイダーを次のコマンドで実行すると、スパイダーは機能します。scrapy crawl myspider

class MySpider(BaseSpider):
    name = "myspider"

    def parse(self, response):
        links = SgmlLinkExtractor().extract_links(response)

        for link in links:
            item = QuestionItem()
            item['url'] = link
            yield item

    def __init__(self):
        start_urls = []

        conn = MySQLdb.connect(host='127.0.0.1',
                       user='root',
                       passwd='xxxx',
                       db='myspider',
                       port=3306)
        cur = conn.cursor()
        cur.execute("SELECT * FROM pages")
        rows = cur.fetchall()
        for row in rows:
            start_urls.append(row[0])

        self.start_urls = start_urls 

        conn. close()

このプロジェクトを「scrapy deploy -p mysqlproject」でscrapydにデプロイし、スパイダーを次のようにスケジュールした後"curl http://localhost:6800/schedule.json -d project=mysql -d spider=myspider"

問題は、start_urls がデータベースから入力されていないことです。代わりに、sql コマンドは空の配列を返します。(私が推測する) ここに示すように、dbs_dir によって構成された独自の mysql.db に接続するため: http://doc.scrapy.org/en/0.14/topics/scrapyd.html#dbs-dir

mysql.db ではなく、scrapyd と mysql サーバー間の接続を確立するにはどうすればよいですか?

4

1 に答える 1

0

あなたの問題は、内部 SQLite データベースのみを指す dbs_dir ではないと思います。start_urls を含むサーバーではなく、scrapyd のデプロイ サーバーで実行されている MySQL サーバーに接続している可能性があります。

于 2013-01-08T12:24:38.373 に答える