(详细步骤)使用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

相关文章

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

C++变换迭代器使用方法小结

《C++变换迭代器使用方法小结》本文主要介绍了C++变换迭代器使用方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、源码2、代码解析代码解析:transform_iterator1. transform_iterat