【scrapy实战】获取我的博客信息
需求
之前写过一个blog,是通过基本的bs4完成爬取的:
传送门
这样写动态爬虫的缺点包括:
1.速度慢
2.需要额外的解析
3.要额外判断blink信息,没有容错机制
因此,我们考虑使用scrapy框架,源码在我的github仓库
scrapy爬取博客源码
scrapy框架
scrapy框架是一个全家桶爬虫
item定义需要爬取的对象和属性
pipeline定义过滤规则
settings定义配置信息
article是爬虫程序,定义如何迭代访问不同的url
核心就是article的编写!!
关于scrapy的创建
1.首先是下载scrapy库
2.创建一个scrapy项目
scrapy startproject 项目名
3.创建一个爬虫脚本
scrapy genspider article 主网页名
完成了以上三步之后就可以开始编写scrapy项目了
定义items对象
# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.htmlimport scrapyclass Article(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()# 记录每一篇文章的信息title = scrapy.Field()read = scrapy.Field()like = scrapy.Field()review = scrapy.Field()collect = scrapy.Field()
我们需要爬取的是文章信息,这里我们定义了题目、浏览量、点赞量、评论量和收藏量
最核心的爬虫脚本(这里是article.py)
1.首先,我们需要定义主网站和起始网站
name = 'article'allowed_domains = ['blog.csdn.net']# just as a beginner(useless)start_urls = ['https://blog.csdn.net']
2.整理一下我们的逻辑(看一下文章顶的链接,另一篇动态爬虫的文章有详细解释)
先通过api获取所有的文章url信息,所以我们需要定义一个函数来浏览全部api,把所有文章url存起来
3.获取全部文章的url
# 这里无法产生联动# 所以无奈,只能先获取全部article的urldef get_all_my_articles(self):article_urls = []header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36','referer': 'https://bridge-killer.blog.csdn.net/'}menu_url = "https://blog.csdn.net/community/home-api/v1/get-business-list?page={}&size=20&businessType=lately&noMore=false&username=weixin_40986490"# 从debug中可以发现只能去到44页for page in range(1, 44):r = requests.get(menu_url.format(page), headers = header)for article in r.json()['data']['list']:article_urls.append(article['url'])return article_urls
4.文章页的解析(这里可以结合scrapy shell 验证reponse.css的结果,也可以通过“检查”中的元素复制css选择器结果)
这一步是关键的一步,需要分析目标网页
def parse_article(self, response):article = Article()article['title'] = response.css('#articleContentId::text').get()article['read'] = response.css('.read-count::text').get()article['like'] = response.css('#spanCount::text').get().strip()article['review'] = response.css('li.tool-item:nth-child(3) > a:nth-child(1) > span:nth-child(2)::text').get().strip()article['collect'] = response.css('#get-collection::text').get().strip()yield article
5.迭代遍历全部的博客url,使用parse(override)
def parse(self, response):article_urls = self.get_all_my_articles()for article_url in article_urls:yield response.follow(article_url, self.parse_article)
过滤
好了,我们获取完全部的信息后,可以过滤一下:
假如我们只要记录200阅读量以上的文章,就可以使用DropItems来完成
这里是pipelines.py
from scrapy.exceptions import DropItemclass MyblogPipeline:def process_item(self, item, spider):# we just need that article# which being read more than 200if item.get('read'):# 把 item 的 score 变成整数item['read'] = int(item['read'])if item['read'] < 200:raise DropItem('去掉200阅读量以下的文章')return item
存储和配置
settings.py
# 要使用的 pipelineITEM_PIPELINES = {'myBlog.pipelines.MyblogPipeline': 300, # 300 表示顺序,pipeline 有多个时,数字越小越先执行}FEED_FORMAT = 'csv' # 最后输出的文件格式FEED_URI = 'my_blog_articles.csv' # 最后输出的文件名# 为了避免对被爬网站造成太大的压力,我们启动自动限速,设置最大并发数为 5AUTOTHROTTLE_ENABLED = TrueAUTOTHROTTLE_TARGET_CONCURRENCY = 5
这里的配置提供了存储的格式和文件名,以及并发数
成果
得到一个csv文件
总结
scrapy是一个保姆式的爬虫框架
我们只需要定义数据格式,定义url抓取顺序,然后再定义数据过滤模式,和数据存储方式即可
简化了很多逻辑,关键是如何分析页面,通过response.css获取对应的元素
【scrapy实战】获取我的博客信息相关推荐
- 使用scrapy抓取博客信息
使用scrapy抓取博客信息 本文使用python的爬虫工具scrapy获取博客园发布的文档的信息. 创建cnblog爬虫项目: scrapy startproject cnblog 创建爬虫cnbl ...
- python爬虫教程:基于python框架Scrapy爬取自己的博客内容过程详解
前言 python中常用的写爬虫的库常有urllib2.requests,对于大多数比较简单的场景或者以学习为目的,可以用这两个库实现.这里有一篇我之前写过的用urllib2+BeautifulSou ...
- php bloginfo templatedirectory,WordPress函数:bloginfo(显示博客信息)
描述 显示你的博客信息,大部分都是显示WordPress管理界面的 用户资料 和 常规设置 中的信息.它可以在模板文件的任何地方使用.一般 bloginfo() 都是用来直接在浏览器中输出内容的.如果 ...
- python爬取新浪微博数据中心_Python爬虫框架Scrapy实战之批量抓取招聘信息
网络爬虫抓取特定网站网页的html数据,但是一个网站有上千上万条数据,我们不可能知道网站网页的url地址,所以,要有个技巧去抓取网站的所有html页面.Scrapy是纯Python实现的爬虫框架,用户 ...
- Python爬虫入门实战2:获取CSDN个人博客文章基础信息
☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036 ░ 一.引言 当爬取博文内容时,有时需要进行 ...
- python scrapy 爬博客信息
我又要来刷自己博客了,捂脸 这次是用scrapy 先创建一个scrapy项目 命令: scrapy startproject myblog 目录结构: scrapy.cfg myblog/ | ...
- Python爬虫入门实战1:获取CSDN个人博客文章目录及阅读量数据
☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036 ░ 一.引言 有阵子博客的访问量出现了比较大 ...
- Vue.js实训【基础理论(5天)+项目实战(5天)】博客汇总表【详细笔记】
目 录 前言 基础理论(5天) 基础理论-Day01 基础理论-Day02 基础理论-Day03 基础理论-Day04 基础理论-Day05 项目实战 项目实战-Day01 项目实战-Day02 ...
- python requests爬虫——爬取李开复博客信息(包括javascript部分信息)
今天是国庆假期第二天,已经玩了一天了,今天整理一下前两天写的数据分析作业思路,给实验报告打一下底稿.供对爬虫有兴趣的小伙伴们参考,也希望给实验没完成的同学提供一点小小的帮助. 任务要求. 1)分析页面 ...
最新文章
- 阿里疯传,手把手教你如何从0开始开展UI自动化测试?
- careercup-中等难度 17.9
- os:进程与线程问题
- 浅谈巴拿马电源的谐波消除原理
- SQL 去除重复记录 只保留重复记录中的一条
- P4068 [SDOI2016]数字配对
- 前端学习(3104):react-hello-react案例
- 【深圳云栖大会】阿里云弹性计算ESSD云盘产品全面解析
- SCSF 系列:Smart Client Software Factory 与 ObjectBuilder
- 数据中心多余的热量去哪儿了?
- vue异步数据 报错_VUE 异步数据传递给 component props 的问题
- mysql解释命令,MySQL中EXPLAIN解释命令
- VM虚拟机下安装vulkan的踩坑
- 搭建自已的聊天服务器Rocket.Chat
- ZZULIOJ 1067: 有问题的里程表
- 计算机技术专硕学制两年的学校,专硕一般读几年
- java_232_GOF23设计模式_建造者模式详解_练习
- [Beta]第四次 Scrum Meeting
- 【教程】Github快速学习
- web部署到服务器显示404,WAR包部署到服务器的tomcat下404报错
热门文章
- Ubuntu/Debian网络配置 Ubuntu禁用自动更新
- GCD(i,j)求和
- mysql查询工资大于某个员工_一个SQL实现薪水大于所在部门平均薪水的员工
- 爱因斯坦的超级问题(谁养鱼)SQL解法
- R语言实战应用精讲50篇(三十)-R语言实现支持向量机(附R语言代码)
- 8051单片机的串行通信
- webbench的安装和使用
- 软碟通 UltraISO,虚拟光盘文件的制作,编辑,转换工具,可以直接编辑虚拟光盘或提取文件,打开isz,iso的工具,注册码...
- 南开大学和华科计算机考研哪个好,都是985名校,南开大学和天津大学,哪个更值得上?...
- opencv 与dlib 结合实现人脸融合