Определение дополнительных методов в классе 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)