提到爬虫框架,这里不得不提 Scrapy,它是一款非常强大的分布式异步爬虫框架,更加适用于企业级的爬虫!
项目地址:
https://github.com/scrapy/scrapy
本篇文章将借助一个简单实例来聊聊使用 Scrapy 编写爬虫的完整流程
- 实战
目标对象:
aHR0cHMlM0EvL2dvLmNxbW1nby5jb20vZm9ydW0tMjMzLTEuaHRtbA==
我们需要爬取目标网站下帖子的基本信息
2-1 安装依赖
安装依赖
pip3 install Scrapy
Mysql
pip3 install mysqlclient
2-2 创建项目及爬虫
分析目前地址,获取网站 HOST 及爬取地址,在某个文件夹下利用命令创建一个爬虫项目及一个爬虫
创建一个爬虫项目
scrapy startproject cqmmgo
打开文件夹
cd cqmmgo
创建一个爬虫
scrapy genspider talk 网站HOST
2-3 定义 Item 实体对象
在 items.py 文件中,将需要爬取的数据定义为 Item
比如,这里就需要爬取帖子标题、作者、阅读数、评论数、贴子 URL、发布时间
items.py
import scrapy
杂谈
class CqTalkItem(scrapy.Item):
# 标题
title = scrapy.Field()
# 作者
author = scrapy.Field()
# 查看次数
watch_num = scrapy.Field()
# 评论次数
comment_num = scrapy.Field()
# 地址
address_url = scrapy.Field()
# 发布时间
create_time = scrapy.Field()
2-4 编写爬虫
在 spiders 文件夹下的爬虫文件中编写具体的爬虫逻辑
通过分析发现,帖子数据是通过模板直接渲染,非动态加载,因此我们直接对 response 进行数据解析
PS:解析方式这里推荐使用 Xpath
解析完成的数据组成上面定义的 Item 实体添加到生成器中
spiders/talk.py
import scrapy
from cqmmgo.items import CqTalkItem
from cqmmgo.settings import talk_hour_before
from cqmmgo.utils import calc_interval_hour
class TalkSpider(scrapy.Spider):
name = ‘talk’
allowed_domains = [‘HOST’]
# 第1-5页数据
start_urls = ['https://HOST/forum-233-{}.html'.format(i + 1) for i in range(5)]
def parse(self, response