scrapy框架的使用

流程思路
将解析数据存到items对象
使用yield 将items交给管道文件处理
在管道文件pipelines编写代码储存到数据库
在setting配置文件开启管道
案例
items中
按照格式定义字段
import scrapy

class QiubaiproItem(scrapy.Item):
# 语法: 字段 = scrapy.Field()
author = scrapy.Field()
content = scrapy.Field()
1
2
3
4
5
6
setting中
解开注释
ITEM_PIPELINES = {
‘qiubaiPro.pipelines.QiubaiproPipeline’: 300, # 300优先级
}
1
2
3
爬虫文件中
必须导入items 中的类
将数据录入item
用yield item提交给管道
import scrapy
from qiubaiPro.items import QiubaiproItem

class QiubaiSpider(scrapy.Spider):
name = ‘qiubai’
# allowed_domains = [‘qiushibaike.com/text’] # 图片可能不是该域名下
start_urls = [‘https://www.qiushibaike.com/text/’] # https 要注意

def parse(self, response):
    # 取段子列表
    div_list = response.xpath("//div[@id='content-left']/div")

    # 存储解析到的页面数据
    data_list = []
    for div in div_list:
        # xpath解析的内容存储到 selector对象中,获取内容.extract()
        # extract_first()获取内容  =  .extract()[0]
        author = div.xpath("./div/a[2]/h2/text()").extract()[0]  # 或extract_first()
        content = div.xpath(".//div[@class='content']/span/text()").extract_first()

        # 1.数据解析到items对象(先导入)
        item = QiubaiproItem()
        item['author'] = author
        item['content'] = content

        # 2.将item对象提交给管道
        yield item

管道pipelines中
现在数据库中创建对应格式的表
导入pymysql包
在open_spider中链接数据库
利用pymysql进行数据录入
用try捕获并回滚错误
在close_spider中关闭数据库
import pymysql

class QiubaiproPipeline(object):
conn = None
cursor = None # 游标对象

# 1. 链接数据库
# 2. 执行sql语句
# 3. 提交

# 爬虫开始执行
def open_spider(self, spider):
    print('开始爬虫,链接数据库')
    self.conn = pymysql.Connect(
        host='127.0.0.1',
        port=3306,
        user='root',
        password='123',
        db='qiubai',
    )

# 对提交的item对象,mysql数据库储存
# 爬虫每次提交item,该方法被执行一次
def process_item(self, item, spider):

    # 写sql语句 往qiubai这个表中插数据,没有表的话要先在数据库创建
    sql = 'insert into qiubai values("%s","%s")' % (item['author'], item['content'])

    # 创建游标对象
    self.cursor = self.conn.cursor()

    # 提交事务
    try:
        self.cursor.execute(sql)
        self.conn.commit()
    except Exception as e:
        print(e)
        print('异常回滚')
        self.conn.rollback()

    return item

# 结束爬虫时调用
def close_spider(self, spider):
    print('爬虫结束')
    self.cursor.close()
    self.conn.close()

作者:番茄西瓜汤
来源:CSDN
原文:https://blog.csdn.net/weixin_42329277/article/details/84112829
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值