(详细步骤)使用scrapy爬取新浪热点新闻,进入链接获取新闻内容。

本文主要是介绍(详细步骤)使用scrapy爬取新浪热点新闻,进入链接获取新闻内容。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.在Pycharm的Terminal中输入“scrapy startproject news”创建爬虫项目,“news”为项目名。

2.自动生成的工程目录

3.编写item.py,也就是定义要爬取信息的字段

4.进入news/news/spiders目录下,使用命令“  scrapy genspider -t crawl newscrawl ‘news.sina.com.cn’  ”创建爬虫名为“newscrawl”的爬虫文件,爬虫域是“news.sina.com.cn”。

5.编写newscrawl.py文件。其中“https://news.sina.com.cn/\w/time/\w+-\w+.shtml”正则是用来匹配“http://news.sina.com.cn/hotnews/”页面上的链接的。注:可以查看链接的规律个性化定制。

xpath的匹配可以通过“xpath helper”插件来快速定位,或者通过chrome浏览器按F12检查网页代码,选中匹配的代码右击选择“copy xpath”获取匹配规则。

 

6.编写pipelines.py文件,处理爬取的数据。(此处是存入数据库)

7.在settings.py中将下图中的代码注释取消。

8.启动爬虫,在spiders目录下启动爬虫“scrapy crawl newscrawl

9.任务结束后查看数据库。(因为数据库中newsContent字段在自己的项目中是用富文本编辑器展示的,所以将标签和内容一起爬取出来,便于展示。可以根据自己的需求在步骤5中修改content的xpath匹配规则)

10.将项目部署到阿里云,设置定时任务。

链接:跳转至“定时爬虫”

代码附录: 

1.newscrawl.py

# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from news.items import NewsItem
import timeclass NewscrawlSpider(CrawlSpider):name = 'newscrawl'allowed_domains = ['news.sina.com.cn']start_urls = ['http://news.sina.com.cn/hotnews/']now_time = time.strftime("%Y-%m-%d", time.localtime())reg = r"https://news.sina.com.cn/\w/time/\w+-\w+.shtml"reg = reg.replace("time", now_time)rules = (# Rule(LinkExtractor(allow=r'news.sina.com.cn/hotnews/')),Rule(LinkExtractor(allow=reg), callback='parse_item', follow=True),)def parse_item(self, response):item = NewsItem()item["title"] = response.xpath('//div[@class="main-content w1240"]/h1/text()').extract()[0]item["content"] = response.xpath('//div[@class="article"]').extract()[0]item["source"] = response.xpath('//*[@id="top_bar"]//div[@class="date-source"]/a/text()').extract()[0]item["date"] = response.xpath('//*[@id="top_bar"]//div[@class="date-source"]/span/text()').extract()[0]return item

2. items.py

# -*- coding: utf-8 -*-# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.htmlimport scrapyclass NewsItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()title = scrapy.Field()content = scrapy.Field()source = scrapy.Field()date = scrapy.Field()

3. pipelines.py

# -*- coding: utf-8 -*-# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html# 本地测试
# import json
#
# class NewsPipeline(object):
#     def __init__(self):
#         # 创建一个文件,将文件的保存类型设置为utf-8
#         self.filename = open("news1.json", "w", encoding="utf-8")
#     def process_item(self, item, spider):
#         # 将数据由列表格式先变换为字典格式,再变换为json格式的数据
#         text = json.dumps(dict(item), ensure_ascii=False)+"\n"
#         # 保存数据为utf-8的格式
#         self.filename.write(text)
#         return itemimport pymysqlclass NewsPipeline(object):def __init__(self):# 连接MySQL数据库self.connect = pymysql.connect(host='服务器ip地址', user='root', password='******', db='news', port=3306)self.cursor = self.connect.cursor()def process_item(self, item, spider):# 往数据库里面写入数据sql = "insert into t_news(newsTitle, newsContent, newsSource, newsDate) values (%s, %s, %s, %s)"self.cursor.execute(sql, (item['title'], item['content'], item['source'], item['date']))self.connect.commit()return item# 关闭数据库def close_spider(self, spider):self.cursor.close()self.connect.close()

 

 

这篇关于(详细步骤)使用scrapy爬取新浪热点新闻,进入链接获取新闻内容。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/327963

相关文章

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

Springboot3 ResponseEntity 完全使用案例

《Springboot3ResponseEntity完全使用案例》ResponseEntity是SpringBoot中控制HTTP响应的核心工具——它能让你精准定义响应状态码、响应头、响应体,相比... 目录Spring Boot 3 ResponseEntity 完全使用教程前置准备1. 项目基础依赖(M

springboot的controller中如何获取applicatim.yml的配置值

《springboot的controller中如何获取applicatim.yml的配置值》本文介绍了在SpringBoot的Controller中获取application.yml配置值的四种方式,... 目录1. 使用@Value注解(最常用)application.yml 配置Controller 中

Java使用Spire.Barcode for Java实现条形码生成与识别

《Java使用Spire.BarcodeforJava实现条形码生成与识别》在现代商业和技术领域,条形码无处不在,本教程将引导您深入了解如何在您的Java项目中利用Spire.Barcodefor... 目录1. Spire.Barcode for Java 简介与环境配置2. 使用 Spire.Barco

SQL Server中行转列方法详细讲解

《SQLServer中行转列方法详细讲解》SQL行转列、列转行可以帮助我们更方便地处理数据,生成需要的报表和结果集,:本文主要介绍SQLServer中行转列方法的相关资料,需要的朋友可以参考下... 目录前言一、为什么需要行转列二、行转列的基本概念三、使用PIVOT运算符进行行转列1.创建示例数据表并插入数

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

C# 预处理指令(# 指令)的具体使用

《C#预处理指令(#指令)的具体使用》本文主要介绍了C#预处理指令(#指令)的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1、预处理指令的本质2、条件编译指令2.1 #define 和 #undef2.2 #if, #el

C#中Trace.Assert的使用小结

《C#中Trace.Assert的使用小结》Trace.Assert是.NET中的运行时断言检查工具,用于验证代码中的关键条件,下面就来详细的介绍一下Trace.Assert的使用,具有一定的参考价值... 目录1、 什么是 Trace.Assert?1.1 最简单的比喻1.2 基本语法2、⚡ 工作原理3