一、开发背景

Python作为数据处理方面的一把好手,近年来的热度不断增长。网络爬虫可以说是Python最具代表性的应用之一,那么通过网络爬虫来学习Python以及网络和数据处理的相关内容可以说是再合适不过了。

Scrapy是由Python语言开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。相比于传统的爬虫来说,基于scrapy框架的爬虫更加结构化,同时也更加高效,能完成更加复杂的爬取任务。

二、爬虫效果

1、标题

2、内容

3、评论

4、日期,热度和ID

5、程序运行图

三、具体开发

1、任务需求

1. 爬取网易,搜狐,凤凰和澎湃新闻网站的文章及评论

2. 新闻网页数目不少于10万页

3. 每个新闻网页及其评论能在1天内更新

2、功能设计

1. 设计一个网络爬虫,能够爬取指定网站的全部页面,并提取其中的文章及评论内容

2. 定时运行网络爬虫,实现每日更新数据

3、系统架构

首先简单介绍下scrapy框架,这是一个爬虫框架

绿线是数据流向,

(1)首先从初始URL 开始,Scheduler 会将其交给 Downloader 进行下载,

(2)下载之后会交给 Spider 进行分析,这里的spider就是爬虫的核心功能代码

(3)Spider分析出来的结果有两种:一种是需要进一步抓取的链接,它们会通过middleware传回 Scheduler ;另一种是需要保存的数据,送入Item Pipeline ,进行处理和存储

(4)最后将所有数据输出并保存为文件

4、实际项目

(1)项目结构

可以看到,NewsSpider-master是完整项目文件夹,下面存放有对应各个网站的爬虫启动脚本debug_xx.py,scrapyspider文件夹存放scrapy框架所需的相关文件,spiders文件夹存放实际的爬虫代码

(2)爬虫引擎

以网易新闻的爬虫news_163.py为例,简要说明部分核心代码:

①定义一个爬虫类:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26class news163_Spider(CrawlSpider):

# 网易新闻爬虫名称

name= "163news"

# 伪装成浏览器

headers= {

'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36',

}

#网易全网

allowed_domains= [

"163.com"

]

#新闻版

start_urls= [

'http://news.163.com/'

]

#正则表达式表示可以继续访问的url规则,http://news.163.com/\d\d\d\d\d(/([\w\._+-])*)*$

rules= [

Rule(LinkExtractor(

allow=(

('http://news\.163\.com/.*$')

),

deny= ('http://.*.163.com/photo.*$')

),

callback="parse_item",

follow=True)

]

②网页内容分析模块

根据不同内容的Xpath路径从页面中提取内容,由于网站在不同时间的页面结构不同,因此按照不同页面版式划分成几个if判断句块;1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38def parse_item(self, response):

# response是当前url的响应

article= Selector(response)

article_url= response.url

global count

# 分析网页类型

# 比较新的网易新闻 http://news.163.com/05-17/

if get_category(article)== 1:

articleXpath= '//*[@id="epContentLeft"]'

if article.xpath(articleXpath):

titleXpath= '//*[@id="epContentLeft"]/h1/text()'

dateXpath= '//*[@id="epContentLeft"]/div[1]/text()'

contentXpath= '//*[@id="endText"]'

news_infoXpath='//*[@id="post_comment_area"]/script[3]/text()'

# 标题

if article.xpath(titleXpath):

news_item= newsItem()

news_item['url']= article_url

get_title(article, titleXpath, news_item)

# 日期

if article.xpath(dateXpath):

get_date(article, dateXpath, news_item)

# 内容

if article.xpath(contentXpath):

get_content(article, contentXpath, news_item)

count= count+ 1

news_item['id']= count

# 评论

try:

comment_url= get_comment_url(article, news_infoXpath)

# 评论处理

comments= get_comment(comment_url, news_item)[1]

news_item['comments']= comments

except:

news_item['comments']= ' '

news_item['heat']= 0

yield news_item

根据正则表达式匹配页面内容中的日期信息:1

2

3

4

5

6

7

8

9

10

11'''通用日期处理函数'''

def get_date(article, dateXpath, news_item):

# 时间

try:

article_date= article.xpath(dateXpath).extract()[0]

pattern= re.compile("(\d.*\d)")# 正则匹配新闻时间

article_datetime= pattern.findall(article_date)[0]

#article_datetime = datetime.datetime.strptime(article_datetime, "%Y-%m-%d %H:%M:%S")

news_item['date']= article_datetime

except:

news_item['date']= '2010-10-01 17:00:00'

其他函数:1

2

3

4

5

6

7

8

9

10

11

12

13

14'''网站分类函数'''

def get_category(article):

'''字符过滤函数'''

def str_replace(content):

'''通用正文处理函数'''

def get_content(article, contentXpath, news_item):

'''评论信息提取函数'''

def get_comment_url(article, news_infoXpath):

'''评论处理函数'''

def get_comment(comment_url, news_item):

(3)运行爬虫并格式化存储

①在settings.py中进行配置1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31import sys

# 这里改成爬虫项目的绝对路径,防止出现路径搜索的bug

sys.path.append('E:\Python\以前的项目\\NewsSpider-master\scrapyspider')

# 爬虫名称

BOT_NAME= 'scrapyspider'

# 设置是否服从网站的爬虫规则

ROBOTSTXT_OBEY= True

# 同时并发请求数,越大则爬取越快同时负载也大

CONCURRENT_REQUESTS= 32

#禁止cookies,防止被ban

COOKIES_ENABLED= False

# 输出的编码格式,由于Excel默认是ANSI编码,所以这里保持一致

# 如果有其他编码需求如utf-8等可自行更改

FEED_EXPORT_ENCODING= 'ANSI'

# 增加爬取延迟,降低被爬网站服务器压力

DOWNLOAD_DELAY= 0.01

# 爬取的新闻条数上限

CLOSESPIDER_ITEMCOUNT= 500

# 下载超时设定,超过10秒没响应则放弃当前URL

DOWNLOAD_TIMEOUT= 100

ITEM_PIPELINES= {

'scrapyspider.pipelines.ScrapyspiderPipeline':300,# pipeline中的类名

}

②运行爬虫并保存新闻内容

爬取下来的新闻内容及评论需要格式化存储,如果在IDE中运行debug脚本,则效果如下:

爬取后会保存为.csv文件,使用Excel打开即可查看:

③如果需要将评论单独提取出来,可以使用csv_process.py,效果如下:

四、其他补充

暂时没有

python新闻爬虫系统的功能_基于Scrapy框架的Python新闻爬虫相关推荐

  1. 基于Scrapy框架的Python新闻爬虫

    概述 该项目是基于Scrapy框架的Python新闻爬虫,能够爬取网易,搜狐,凤凰和澎湃网站上的新闻,将标题,内容,评论,时间等内容整理并保存到本地 详细 代码下载:http://www.demoda ...

  2. 基于python网上订餐系统哪家好_基于web的网上订餐系统的设计与实现-毕业论文...

    基于 web 的网上订餐系统的设计与实现 摘要 : 由于因特网技术的高速发展, 人们生活与网络的脚步也随之越来越紧密. 同时也随着市场化和经济全球化越来越多的普及, 众多国内外企业都深刻地认识 到想要 ...

  3. python爬虫定时爬取_如何用框架给python爬虫定时?

    生活中需要按时的事情很多,如果一旦错过原定的时间,就会出现一些不必要的麻烦要处理.在编程中,我们用python做测试,需要某个程序在固定的时间点启用,这就要用到python爬虫的定时功能.常用的几种定 ...

  4. 32-CrawlSpider类爬虫与Spider类爬虫比较-【都是基于Scrapy框架】

    任务:爬取"阳光热线问政平台的每个投诉信息(标题.编号.内容.链接)"    要点:涉及翻页 比较:这两种方法都可以完成任务 方法一使用CrawlSpider类,其中涉及Rule来 ...

  5. 基于python的爬虫系统金融数据_基于Python的互联网金融数据采集

    基于Python的互联网金融数据采集 □文/王 蕾1安英博1刘佳杰2 [提要] 互联网金融数据中潜藏着未知的知识价值,但也存在着巨量的数据冗余.通过Python可以进行互联网金融数据的获取.解析.提取 ...

  6. python人脸识别系统界面设计_基于卷积神经网络的人脸识别系统的设计(Python)

    基于卷积神经网络的人脸识别系统的设计(Python)(论文10000字,外文翻译,参考代码,流程图,人脸图像库) 摘要:随着社会的进步与发展,个人信息的保护变得十分重要.传统的密码保护方式已经不再满足 ...

  7. python识别手写数字字体_基于tensorflow框架对手写字体MNIST数据集的识别

    本文我们利用python语言,通过tensorflow框架对手写字体MNIST数据库进行识别. 学习每一门语言都有一个"Hello World"程序,而对数字手写体数据库MNIST ...

  8. python画圆填色橙色_基于TPC-C基准的Python ORM的性能测试详解

    当开发与数据库需要在一起使用的应用程序时,对象关系映射器(ORM)通常用于Python编程中.Python ORM的示例是SQLAlchemy,Peewee,Pony-ORM和Django.选择ORM ...

  9. 19. python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求 [前期准备] 2.分析及代码实现 (1)获取五大板块详情页url (2)解析每个板块 (3)解析每个模块里的标题中详情页信息 1.需 ...

最新文章

  1. SAP EWM - 其他主数据 - 运输主数据-2
  2. Oracle分组函数
  3. cmd命令操作Mysql数据库,命令行操作Mysql
  4. nodejs 实现抓取数据
  5. php 监听 扫描枪,jquery监听扫码枪获得值
  6. maven的基础入门
  7. Android的ListView长按监听器
  8. qt checkbox 选中事件_Qt学习笔记3(布局管理)
  9. 在电脑上怎么做报表新手_在电脑上如何制作表格_电脑制作表格的步骤教程-系统城...
  10. c#一个项目同时兼容浩辰cad和AutoCad
  11. ssm教培管理系统毕业设计源码230932
  12. .ipynb_checkpoints报错的解决方法
  13. [ArcPy] 1 ArcPy与栅格(Raster)
  14. python找不到指定模块之几种可能的解决办法:
  15. Linux下设置代理方法
  16. 如何把微信删除的聊天记录恢复正常?你知道吗
  17. 最新的100个微信小程序-极乐Store
  18. PDF在线压缩、转换工具
  19. CenOs安装jdk
  20. 关于office2016卸载后注册表残留无法重新安装问题解决

热门文章

  1. PWM波控制舵机总结
  2. idea安装plantuml插件画流程图
  3. 2020年金属非金属矿山(露天矿山)主要负责人考试报名及金属非金属矿山(露天矿山)主要负责人考试资料
  4. youtobe视频推荐 Recommending What Video to Watch Next: A Multitask Ranking System
  5. 关键词4K图片采集下载软件【非常适合做电脑壁纸等】
  6. github搜索方法
  7. JavaScript实现无缝轮播图效果
  8. 清华北大2021毕业生就业报告出炉!清华博士0人出国,70%进体制
  9. 微信小程序商城搭建二手交易网站购物+后台管理系统|前后分离VUE.js
  10. Java面试题大全(整理版)1000+面试题附答案详解,最全面详细,看完不进你找我