最近新项目准备启动,在开始前内容、词库这些都需要提前做好准备,所以就有了这篇文章。
在开始动手,看了下行业核心词排在首页的站,发现内容都多得不要不要的,各种乱七八糟的频道、页面模板,心想,如果每个网站、每套页面都写一套采集模板的话,那简直要累死。

所以,这次,玩点不一样的。

首先,根据需求,采集一个行业的文章内容,可以拆分为两个模块:

  1. 爬虫系统:主要负责在浩瀚的互联网上,找到有内容价值的页面并且把页面抓取回来。涉及到URL去重、爬虫策略深度、广度一些杂事。
  2. 内容处理系统:主要负责处理爬虫抓回来的内容,并从里面提取出内容。

正文提取

以前在用印象笔记的时候,自带的一些小插件就很好用,只需要在浏览器上点一个按钮,就会自动提取出当前网页的正方,并且保存到笔记库里面。
在网上找了下,发现已经有很多现成的解决方案了,而且解决的方案/算法也很有意思。就是基于DOM树来处理的。
凡是DOM节点 name 或ID带有article、content、body的,加权重值。
DOM节点name或ID带有foot、comment、menu……的,降权。
经过一轮遍历后,把得分最高的节点提取出来,作为页面正文所在的节点。
算法参考:python-readability
测试了下,识别率还是挺高的,80%以上的成功率应该有。

 
提取正文效果

抓取系统

爬虫制作上面,选择了一直以来,用的比较顺手的scrapy做框架,代码如下:

 1 # -- coding: utf-8 --
2 import scrapy
3 from scrapy import Request
4 from scrapy.linkextractors import LinkExtractor
5 from scrapy.spiders import CrawlSpider, Rule
6
7 class LinkSpider(CrawlSpider):
8 name = 'link'
9 alloweddomains =
10 starturls =
11 rules = (
12 Rule(LinkExtractor(allow=r'\.htm', deny='baidu\.com'), callback='parseitem', follow=True),
13 )
14
15 def startrequests(self):
16 keywords = open('keywords.txt').readlines()
17 baseurlbaidu = 'https://www.baidu.com/s?rn=50&tn=baidulocal&wd=0&pn=1'
18 for kw in keywords:
19 # 构造百度搜索结果页URL
20 for pn in range(0,700,50):
21 yield Request(baseurlbaidu.format(kw,pn))
22
23 def parsestarturl(self, response):
24 """从种子页面提取URL作为初始链接"""
25 links = response.css('td.f a:first-childattr(href)').extract()
26 for link in links:
27 yield Request(url=link)
28
29 def parseitem(self, response):
30 """提取符合要求的网站内页"""
31 return response.url

代码有木有非常简单(滑稽),种子页面是从百度搜索结果页开始的,为了减少网络请求次数,把百度结果页的网站数量从默认的10个,改成了50,同时使用了无广告版的百度,URL是没有经过加密的。

到这里,基本上一个简单的行业内容采集爬虫就完成了,随意测试了下scrapy的速度,发现在我的 I5机器上,每分钟可以抓3356个页面,这还只是单机单进程,鹅妹子嘤~~

参考资料:
如何实现有道云笔记的网页正文抓取功能?

使用scrapy搭建大型爬虫系统的更多相关文章

  1. 大型web系统数据缓存设计

    1. 前言 在高访问量的web系统中,缓存几乎是离不开的:但是一个适当.高效的缓存方案设计却并不容易:所以接下来将讨论一下应用系统缓存的设计方面应该注意哪些东西,包括缓存的选型.常见缓存系统的特点和数 ...

  2. 大型网站系统与Java中间件实践

    大型网站系统与Java中间件实践(贯通分布式高并发高数据高访问量网站架构与实现之权威著作,九大一线互联网公司CTO联合推荐) 曾宪杰 著   ISBN 978-7-121-22761-5 2014年4 ...

  3. 大型网站系统架构演化之路【mark】

    前言 一 个成熟的大型网站(如淘宝.天猫.腾讯等)的系统架构并不是一开始设计时就具备完整的高性能.高可用.高伸缩等特性的,它是随着用户量的增加,业务功能的 扩展逐渐演变完善的,在这个过程中,开发模式. ...

  4. 用python3.x与mysql数据库构建简单的爬虫系统(转)

    这是在博客园的第一篇文章,由于本人还是一个编程菜鸟,也写不出那些高大上的牛逼文章,这篇文章就是对自己这段时间学习python的一个总结吧. 众所周知python是一门对初学编程的人相当友好的编程语言, ...

  5. 《大型网站系统与JAVA中间件实践》【PDF】下载

    <大型网站系统与JAVA中间件实践>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230062557 内容简介 到底是本什么书,拥有这样 ...

  6. SLAM+语音机器人DIY系列:(五)树莓派3开发环境搭建——1.安装系统ubuntu_mate_16.04

    摘要 通过前面一系列的铺垫,相信大家对整个miiboo机器人的DIY有了一个清晰整体的认识.接下来就正式进入机器人大脑(嵌入式主板:树莓派3)的开发.本章将从树莓派3的开发环境搭建入手,为后续ros开 ...

  7. 大型web系统数据缓存设计-l转载

    原文地址:http://www.wmyouxi.com/a/60368.html#ixzz3tGYG9JwC 1. 前言 在高访问量的web系统中,缓存几乎是离不开的:但是一个适当.高效的缓存方案设计 ...

  8. 基于golang分布式爬虫系统的架构体系v1.0

    基于golang分布式爬虫系统的架构体系v1.0 一.什么是分布式系统 分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统.简单来说就是一群独立计算机 ...

  9. 搭建zabbix监控系统详解

    搭建zabbix监控系统详解 文:warren   博文大纲:一.前言 二.zabbix监控架构三.搭建Zabbix监控服务器四.搭建过程中遇到有些服务无法正常启动的解决办法 一.前言 : 要想实时的 ...

随机推荐

  1. 环境安装——JDK安装

    @ 目录 开发环境-JDK安装 1. 下载地址 2. 安装JDK 3. 配置系统环境 开发环境-JDK安装 无论在我们开始学习Java或者入职第一天安装环境,这个你都是必备滴!下面是下载和安装JDK的 ...

  2. Linux中date的用法

    一.命令格式:date [参数]... [+格式]二.命令功能:date 可以用来显示或设定系统的日期与时间.三.命令格式:%H 小时(以00-23来表示). %I 小时(以01-12来表示). %K ...

  3. 12、windows定时备份数据库

    12.1.删除指定目录中的内容: del /Q E:\DATABAK\* copy 1.txt bak\a.txt 12.2.可用的备份计划: 1.脚本: BakScripts @echo off R ...

  4. SpringBoot:SpringBoot项目中 HttpServletRequest ServletInputStream 读取不到文件数据流

    在Springboot程序启动后,会默认添加OrderedCharacterEncodingFilter和HiddenHttpMethodFilter过滤器.在HiddenHttpMethodFilt ...

  5. 欧拉函数&筛法 模板

    https://blog.csdn.net/Lytning/article/details/24432651    记牢通式 =x((p1-1)/p1) * ((p2-1)/p2)....((pn-1 ...

  6. buu 内涵软件

    一.无壳. 并且是32位程序, 二.用ida静态调试一下. 这里我脑子发热啊,flag已经在眼前,活生生被我放跑了,靠,我直接搜索字符串,然后就一脸懵逼的,进入了很多不知名的函数,就炸了,看了wp才知 ...

  7. Spring学习总结(一)---谈谈对Spring IOC的理解(一:理论知识理解)

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...

  8. python链接postgresql

    #需要安装的库 sudo apt-get install build-dep python-psycopg2 pip install psycopg2 #!/usr/bin/python # -*- ...

  9. java 语言知识

    1.javase 标准版主要用于桌面应用.控制台:javaee 企业版主要用于web应用:javame微缩版主要用于嵌入式. 2.jre是java程序的运行环境,包含jvm(java虚拟机).jdk是 ...

  10. Codeforces Round#704 Div2 题解(A,B,C,D,E)

    FST ROUND !!1 A Three swimmers: 直接整除一下向上取整就好了: #include <bits/stdc++.h> using namespace std; t ...