scrapy爬取数据写入mysql

编写流程,1、定义Items模型 即数据模型类型java实体对象 2、编写Pipeline管道,该模块持久化数据库的  3、编写爬虫类解析爬虫数据,根据Items定义的模型封装数据,提交至Pipeline管道写入数据库
一、定义Items模型
class Cults3DItem(scrapy.Item):
    model_url_init = scrapy.Field()
    status = scrapy.Field()
    url_status = scrapy.Field()
    create_time = scrapy.Field()
    update_time = scrapy.Field()
二、编写Pipeline管道
class Cults3DPipeline:
    mysql = None
    cursor = None

    def open_spider(self, spider):
        self.mysql = pymysql.Connect(host=spider.settings.get('MODEL_HOST'),
                                     port=spider.settings.get('MODEL_PORT'),
                                     user=spider.settings.get('MODEL_USER'),
                                     password=spider.settings.get('MODEL_PASSWORD'),
                                     db=spider.settings.get('MODEL_DBNAME'))
        self.cursor = self.mysql.cursor()

    def process_item(self, item, spider):
        if spider.name == 'cults3d':
            insert_sql = "insert into ods_cults3d(model_url,status,create_time,update_time,url_status) values('{}'," \
                         "'{}','{}','{}','{}')".format(
                item['model_url_init'], item['status'], item['create_time'], item['update_time'], item['url_status'])

            try:
                self.cursor.execute(insert_sql)
                self.mysql.commit()
                print('insert model url data success')
            except Exception as e:
                print(e)
                self.mysql.rollback()
                print('insert data fail')    
    
第三、解析网站数据
class TestSpider(scrapy.Spider):
    name = "xxx"
    allowed_domains = ["xxx.com"]

    def select_url(self):
        cursor = self.mysql.mysql_cursor()
        select_sql = "select model_url from ods_cults3d"
        cursor.execute(select_sql)
        return cursor.fetchall()

    def start_requests(self):
        headers = {
            'user_agent': UserAgent().random
        }
        start_urls = "初始请求url"
        yield scrapy.Request(url=start_urls,
                             callback=self.parse,
                              headers=headers,
                             dont_filter=True) #设置为True,方式请求被过滤

    def parse(self, response)
        if response.status == 200:
             解析数据
            create_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            list_article = response.xpath('//*[@id="content"]/div[3]/article')
             url = article.xpath('./div/a/@href').extract()
             item = Cults3DItem()
             item['url'] = url
             yield item  #提交给管道

    
        else:
            print("data coming!!!", response.status)
 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值