版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
新建项目
进入自定义的项目目录中,运行创建命令:
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