实验题目:
采集“中国新闻网”的“即时新闻”数据。网址:滚动新闻-中国新闻网-梳理天下新闻。
要求:
使用Scrapy框架采集数据;
采集1-3页的新闻标题、发布时间、新闻内容;
每个新闻用一个文本文件存储,文件名为新闻标题。
实验相关知识的简述
(1)安装Scrapy :Conda install scrapy
(2)熟练使用scrapy
(3)熟练使用xpath以及css定位元素
问题分析与重点环节设计
采集过程主要使用“By.XPATH”以及CSS选择器的方式搜索相应的元素。数据采集过程分为两步,首先采集新闻网列表页中所有新闻超链接的链接地址,然后对于每一个链接地址,采集新闻标题,时间以及内容。
实验目的
(1)掌握Scrapy的安装、引入与项目创建、运行方法
(2)掌握Scrapy选择器的使用
(3)掌握Scrapy的Spider、Item和Pipeline的编程方法
代码:
import scrapy
from ..items import News
class S1Spider(scrapy.Spider):
name = 's1'
allowed_domains = ['www.chinanews.com']
start_urls = ['https://www.chinanews.com/scroll-news/news1.html','https://www.chinanews.com.cn/scroll-news/news2.html','https://www.chinanews.com.cn/scroll-news/news3.html']
def parse(self, response):
for link in response.xpath ('//div[@class="w1280 mt20"]//div[@class="content_list"]/ul/li'):
#title=content.xpath('./div[2]/a/text()').get()
href=link.xpath('./div[2]/a/@href').get()
#print('https://www.chinanews.com'+ str(href))
#classify = content.xpath('./div[1]/a/text()').get()
# time=content.xpath('./div[@class="dd_time"]/text()').get()
#print(classify,title,href,time)
yield scrapy.Request('https://www.chinanews.com'+ str(href),callback= self.parse_news)
def parse_news(self, response):
title=response.xpath ('//div[@class="content"]//div[@class="content_maincontent_more"]/h1/text()').get()
time=response.xpath ('//div[@class="content"]//div[@class="content_maincontent_more"]//div[@class="content_left_time"]/text()').get()
content='<br>'.join(response.css('.left_zw ::text').getall())
#print(title,time,content)
yield News (title =title ,content =content ,time=time )