前言
因为项目需要搭建一个定时爬虫,用了几天的时间写好了scrapy,又了解到部署爬虫需要用到scrapyd(通过post请求的方式执行爬虫,功能太简单不够方便),方便的设置定时任务等需要用到scrapy可视化管理工具scrapydweb(相当于scrapyd基础上的框架,常见的有spiderkeeper和scrapydweb两款,网上介绍说spiderkeeper更稳定,scrpaydweb功能更完善)。因为网上相关文章比较少而且不够全面,所以本文做个简单记录和分享
均在Windows计算机上本地运行,项目环境使用全局环境,只讲到了项目过程中我遇到过的情况和问题,其他问题或其他系统或远程运行可以参考其他文章
scrapy
- 安装scrapy
pip install scrapy
pip install pywin32(之前没装出现了scrapyd运行爬虫没反应的情况) - 创建项目
scrcpy startproject 项目名称
- 简单配置settings.py
- 不遵守爬虫公约,不然爬不了
ROBOTSTXT_OBEY = False
- 添加User-Agent等模拟请求头
DEFAULT_REQUEST_HEADERS = { 'User-Agent': '...', }
- 不遵守爬虫公约,不然爬不了
- items.py中添加数据模型
- 创建需要收集的数据变量
class XXXItem(scrapy.Item): origin = scrapy.Field() title = scrapy.Field() views = scrapy.Field() link = scrapy.Field()
- 创建需要收集的数据变量
- pipelines.py中配置存储方式
import pymysql class HotListPipeline: def __init__(self):#初始连接数据库 self.con = pymysql.connect(host='localhost', port=3306, database='xxx', charset='utf8', user='root', password='xxx') def open_spider(self, spider):#爬虫开始前创建cursor self.cursor = self.con.cursor() def process_item(self, item, spider):#爬虫过程中执行sql语句 self.cursor.execute( "insert into xxx values ('{item['origin']}','{item['title']}',{item['views']},'{item['link']}')") self.con.commit() return item def close_spider(self, spider):#爬虫结束后关闭数据库连接 self.con.close()
- 创建常规爬虫
- 创建
scrapy genspider 项目名 域名
- 常规爬虫需要自己指定爬取页面,通过scrapy genspider -t crawl 项目名 域名创建的爬虫能够自己寻找满足rule规格的页面并爬取,本文不做具体介绍
- 域名设置为二级域名.一级域名即可,因为爬取的网址可能主机名并不一样,例如:设置域名为www.baidu.com则不能爬取news.baidu.com
- 爬虫内容
- 传入爬取链接&#
- 创建