scrapy框架的使用

本文介绍了使用Scrapy将解析数据存储到数据库的流程。先将数据存到items对象,用yield交给管道处理,在管道文件编写代码存储到数据库,并在setting配置文件开启管道。还给出了items、setting、爬虫文件和管道pipelines中的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

流程思路
将解析数据存到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()

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

### Scrapy框架使用示例项目 #### 创建Scrapy项目 为了启动一个新的Scrapy项目,在命令行工具中输入`scrapy startproject 项目名称`。这会创建一个包含基本文件结构的新目录,这些文件对于构建爬虫至关重要[^2]。 ```bash scrapy startproject example_project ``` #### 定义Item类 在项目的items.py文件里定义所需的数据模型。通过继承`scrapy.Item`并指定字段类型为`scrapy.Field()`完成此操作。例如,如果目标是从网页抓取文本、作者名以及标签,则item应如此设置: ```python import scrapy class ExampleProjectItem(scrapy.Item): text = scrapy.Field() author = scrapy.Field() tags = scrapy.Field() ``` #### 编写Spider脚本 接下来是在spiders子目录下建立具体的蜘蛛程序(即spider),它负责访问URL列表中的页面,并从中抽取信息。下面是一个简单的例子,展示了如何利用XPath表达式定位HTML文档内的特定部分来进行解析[^4]。 ```python import scrapy from ..items import ExampleProjectItem class QuotesSpider(scrapy.Spider): name = "quotes" def start_requests(self): urls = [ 'http://quotes.toscrape.com/page/1/', 'http://quotes.toscrape.com/page/2/' ] for url in urls: yield scrapy.Request(url=url, callback=self.parse) def parse(self, response): item = ExampleProjectItem() all_div_quotes = response.css('div.quote') for quotes in all_div_quotes: title = quotes.css('span.text::text').extract_first() author = quotes.css('.author::text').extract_first() tag = quotes.css('.tag::text').extract() item['title'] = title item['author'] = author item['tag'] = tag yield item ``` 上述代码片段实现了对多个页面发起请求的功能;每当接收到响应时调用parse方法处理返回的数据。这里采用CSS选择器来选取所需的DOM节点,并最终将提取的信息封装成Items对象传递给后续阶段进一步处理或存储。 #### 运行爬虫 最后一步就是执行爬虫任务了。切换至终端窗口,进入项目根路径后运行以下指令即可让之前编写的爬虫开始工作: ```bash cd example_project/ scrapy crawl quotes ``` 这样就完成了整个流程的介绍,从初始化工程到最后部署执行完整的Scrapy应用实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值