python基于Scrapy怎么从数据库获取URL进行抓取

寻技术 Python编程 2023年11月17日 134

本文小编为大家详细介绍“python基于Scrapy怎么从数据库获取URL进行抓取”,内容详细,步骤清晰,细节处理妥当,希望这篇“python基于Scrapy怎么从数据库获取URL进行抓取”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

代码如下:

import pymysql
class MySpider(scrapy.Spider):
  MAX_RETRY = 10
  logger = logging.getLogger(__name__)

  name = 'myspider'
  start_urls = []

  @classmethod
  def from_crawler(cls, crawler, *args, **kwargs):
      spider = super(MySpider, cls).from_crawler(crawler, *args, **kwargs)
      crawler.signals.connect(spider.spider_closed, signals.spider_closed)
      return spider

  def __init__(self):
      # 连接database
      conn = pymysql.connect(host="数据库地址",user="用户名",password="数据库密码",database="数据库名",charset="utf8")
      self.conn = conn
      self.logger.info('Connection to database opened')
      super(MySpider, self)

  def spider_closed(self, spider):
      self.db.close()
      self.logger.info('Connection to database closed')

  def parse(self, response):    
    item = MyItem()
    #这里处理抓取逻辑
    yield item
  def errback_httpbin(self):
      self.logger.info('http error')
        
  def start_requests(self):
      cursor = self.conn.cursor()
      #这里处理查询数据库逻辑
      cursor.execute('SELECT * FROM mytable WHERE nbErrors < %s', (self.MAX_RETRY,))
      rows = cursor.fetchall()
        for row in rows:
          yield Request(row[0], self.parse, meta={
              'splash': {
                  'args':{
                      'html': 1,
                      'wait': 2
                      }
                  }
              }, errback=self.errback_httpbin)
      cursor.close()
关闭

用微信“扫一扫”