Определение дополнительных методов в классе Scrapy

Как выполняется класс Scrapy и как вы включаете дополнительные методы в класс паука?

Например, из документов:

import scrapy

class DmozSpider(scrapy.Spider):
    name = "dmoz"
    allowed_domains = ["dmoz.org"]
    start_urls = [
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
    ]

    def parse(self, response):
        filename = response.url.split("/")[-2] + '.html'
        with open(filename, 'wb') as f:
            f.write(response.body)

Если бы я хотел определить некоторые методы опроса базы данных или что-то еще, как я мог бы это сделать и почему?

1 ответ

Решение

Давайте рассмотрим следующий вариант использования - получение URL для сканирования из базы данных. Для этого вместо start_urlsнужно использовать start_requests() метод.

Пример кода (используя MySQLdb водитель напрямую):

import MySQLdb
import scrapy

class DmozSpider(scrapy.Spider):
    name = "dmoz"
    allowed_domains = ["dmoz.org"]

    def start_requests(self):
        db = MySQLdb.connect(host="host", user="user" ...) 
        cursor = db.cursor()

        cursor.execute("SELECT url from url_table")
        requests = [scrapy.Request(url=row[0]) for row in cursor.fetchall()]

        cursor.close()

        return requests

    def parse(self, response):
        filename = response.url.split("/")[-2] + '.html'
        with open(filename, 'wb') as f:
            f.write(response.body)
Другие вопросы по тегам