Python爬虫之Scrapy框架的基本使用

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_44613063/article/details/97258544

新建项目

进入自定义的项目目录中,运行创建命令:

scrapy startproject spider

spider 为项目名称,可以看到将会创建一个 spider 文件夹,目录结构大致如下:

spider/
    scrapy.cfg			# 项目的配置文件
    spider/				# 项目的 Python 模块,与项目名称重名,将从这里引用代码
        __init__.py
        items.py			# 项目的目标文件
        middlewares.py		# 项目的中间件
        pipelines.py		# 项目的管道文件,用来定义储存
        settings.py			# 项目的设置文件
        spiders/			# 存储爬虫代码目录
            __init__.py
            ...

定义字段

准备抓取 CSDN 网站首页推荐里所有的文章及链接、作者

创建一个 CsdnItem 类,和构建 item 模型(model):

import scrapy

class CsdnItem(scrapy.Item):
    title = scrapy.Field()
    link = scrapy.Field()

编写爬虫

在 spiders 文件夹中新建一个爬虫文件

正好 scrapy 有专门的命令来操作,在项目文件夹的路径下使用,取名为 csdn,并确定爬取的范围:

scrapy genspider csdn "csdn.net"

spider/spiders 文件夹里就新增了一个 csdn.py爬虫文件,打开文件,里面默认增加了下列代码:

import scrapy

class CsdnSpider(scrapy.Spider):
    name = 'csdn'
    allowed_domains = ['csdn.net']
    start_urls = ['http://csdn.net/']

    def parse(self, response):
        pass

如果要运行文件,就要用命令行:

scrapy crawl csdn

scrapy 就会开始爬取相应的网址,并输出相应的访问信息,比如访问时间、状态码、请求信息等

不过由于默认调用 pass,访问一遍链接后就直接关闭了,不会有后续操作,所以需要我们根据要求来进行编写,以便获取我们需要的内容


提取数据

通过每篇文章的标签,使用 css 选择器来提取内容:

import scrapy
from spider.items import CsdnItem

class CsdnSpider(scrapy.Spider):
    name = 'csdn'
    allowed_domains = ['csdn.net']
    start_urls = ['http://csdn.net/']

    def parse(self, response):
        items = []
        csdns = response.css('.list_con')
        for csdn in csdns:
            item = CsdnItem()
            title = csdn.css('.title h2 a::text').extract()
            link = csdn.css('.title h2 a::attr(href)').extract()
            auther = csdn.css('.list_userbar dd a::text').extract()
            item['title'] = title[0].strip()
            item['link'] = link[0]
            item['auther'] = auther[0].strip()
            items.append(item)
            print(item)
        return items

再次运行之后:
在这里插入图片描述


保存数据

scrapy 保存信息的最简单的方法主要有四种,-o 输出指定格式的文件,命令如下:

scrapy crawl csdn -o article.json

json lines格式,默认为Unicode编码

scrapy crawl csdn -o article.jsonl

csv 逗号表达式,可用Excel打开

scrapy crawl csdn -o article.csv

xml格式

scrapy crawl csdn -o article.xml

猜你喜欢

转载自blog.csdn.net/weixin_44613063/article/details/97258544