需求

之前写过一个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实战】获取我的博客信息相关推荐

  1. 使用scrapy抓取博客信息

    使用scrapy抓取博客信息 本文使用python的爬虫工具scrapy获取博客园发布的文档的信息. 创建cnblog爬虫项目: scrapy startproject cnblog 创建爬虫cnbl ...

  2. python爬虫教程:基于python框架Scrapy爬取自己的博客内容过程详解

    前言 python中常用的写爬虫的库常有urllib2.requests,对于大多数比较简单的场景或者以学习为目的,可以用这两个库实现.这里有一篇我之前写过的用urllib2+BeautifulSou ...

  3. php bloginfo templatedirectory,WordPress函数:bloginfo(显示博客信息)

    描述 显示你的博客信息,大部分都是显示WordPress管理界面的 用户资料 和 常规设置 中的信息.它可以在模板文件的任何地方使用.一般 bloginfo() 都是用来直接在浏览器中输出内容的.如果 ...

  4. python爬取新浪微博数据中心_Python爬虫框架Scrapy实战之批量抓取招聘信息

    网络爬虫抓取特定网站网页的html数据,但是一个网站有上千上万条数据,我们不可能知道网站网页的url地址,所以,要有个技巧去抓取网站的所有html页面.Scrapy是纯Python实现的爬虫框架,用户 ...

  5. Python爬虫入门实战2:获取CSDN个人博客文章基础信息

    ☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036 ░ 一.引言 当爬取博文内容时,有时需要进行 ...

  6. python scrapy 爬博客信息

    我又要来刷自己博客了,捂脸 这次是用scrapy 先创建一个scrapy项目 命令: scrapy startproject myblog 目录结构: scrapy.cfg   myblog/   | ...

  7. Python爬虫入门实战1:获取CSDN个人博客文章目录及阅读量数据

    ☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036 ░ 一.引言 有阵子博客的访问量出现了比较大 ...

  8. Vue.js实训【基础理论(5天)+项目实战(5天)】博客汇总表【详细笔记】

    目   录 前言 基础理论(5天) 基础理论-Day01 基础理论-Day02 基础理论-Day03 基础理论-Day04 基础理论-Day05 项目实战 项目实战-Day01 项目实战-Day02 ...

  9. python requests爬虫——爬取李开复博客信息(包括javascript部分信息)

    今天是国庆假期第二天,已经玩了一天了,今天整理一下前两天写的数据分析作业思路,给实验报告打一下底稿.供对爬虫有兴趣的小伙伴们参考,也希望给实验没完成的同学提供一点小小的帮助. 任务要求. 1)分析页面 ...

最新文章

  1. 阿里疯传,手把手教你如何从0开始开展UI自动化测试?
  2. careercup-中等难度 17.9
  3. os:进程与线程问题
  4. 浅谈巴拿马电源的谐波消除原理
  5. SQL 去除重复记录 只保留重复记录中的一条
  6. P4068 [SDOI2016]数字配对
  7. 前端学习(3104):react-hello-react案例
  8. 【深圳云栖大会】阿里云弹性计算ESSD云盘产品全面解析
  9. SCSF 系列:Smart Client Software Factory 与 ObjectBuilder
  10. 数据中心多余的热量去哪儿了?
  11. vue异步数据 报错_VUE 异步数据传递给 component props 的问题
  12. mysql解释命令,MySQL中EXPLAIN解释命令
  13. VM虚拟机下安装vulkan的踩坑
  14. 搭建自已的聊天服务器Rocket.Chat
  15. ZZULIOJ 1067: 有问题的里程表
  16. 计算机技术专硕学制两年的学校,专硕一般读几年
  17. java_232_GOF23设计模式_建造者模式详解_练习
  18. [Beta]第四次 Scrum Meeting
  19. 【教程】Github快速学习
  20. web部署到服务器显示404,WAR包部署到服务器的tomcat下404报错

热门文章

  1. Ubuntu/Debian网络配置 Ubuntu禁用自动更新
  2. GCD(i,j)求和
  3. mysql查询工资大于某个员工_一个SQL实现薪水大于所在部门平均薪水的员工
  4. 爱因斯坦的超级问题(谁养鱼)SQL解法
  5. R语言实战应用精讲50篇(三十)-R语言实现支持向量机(附R语言代码)
  6. 8051单片机的串行通信
  7. webbench的安装和使用
  8. 软碟通 UltraISO,虚拟光盘文件的制作,编辑,转换工具,可以直接编辑虚拟光盘或提取文件,打开isz,iso的工具,注册码...
  9. 南开大学和华科计算机考研哪个好,都是985名校,南开大学和天津大学,哪个更值得上?...
  10. opencv 与dlib 结合实现人脸融合