学期:2021-2022学年第一学期
学 院 | 大数据与智能工程学院 | 年 级、 专 业、 班 | 18级数据科学与大数据技术(专升本)一班 | 姓 名 | 学号 | ||
---|---|---|---|---|---|---|---|
实验项目 名称 | Scrapy框架的应用—获取每篇媒体报道的标题,发布时间,浏览量 |
实验学时: 3h 同组学生姓名: 王美琴、尤博欣、周青青、李昕辰 实验地点: 9317
实验日期: 实验成绩: 批改教师: 批改时间:
指导教师评阅:
- 实验目的:使用Scrapy框架编写爬虫,获取每篇媒体报道的标题,发布时间,浏览量
- 实验原理:Scrapy框架、xpath网页解析、re正则表达式检索
- 实验环境 :win11、python3.9、vscode、edge
- 实验步骤:
- 创建爬虫框架
- 创建Spider子类
- 实现Spider子类方法以达到爬虫功能
核心代码:
import re
import scrapy
class QuotesSpider(scrapy.Spider):
name = "tipdm"
start_urls = [
"http://www.tipdm.com/gsxw/index_51.jhtml"
]
def parse(self, response):
# 获取本页的所有子页链接
itemsDom = response.xpath("//*[@class=\"item clearfix noImg \"]")
for itemDom in itemsDom:
contentPageUrl = re.search("href=\"(.*?)\"", itemDom.get()).group(1)
yield scrapy.Request(contentPageUrl, self.parseContent)
# 获取下一页URL并递归
currPageClassOnclick = response.xpath("//*[@class=\"currPageClass\"]/following-sibling::a[1]/@onclick").get()
if currPageClassOnclick is None:
return
nextUrlPart = re.search("\'(.*?)\'", currPageClassOnclick).group(1)
yield scrapy.Request(f"{response.url[0:response.url.rfind('/')]}/{nextUrlPart}", self.parse)
def parseContent(self, response):
artTitleDom = response.xpath("//*[@class=\"artTitle\"]")
yield {
'id': re.search(r"/(\d+)", response.url).group(1),
'title': artTitleDom.xpath("h1/text()").get(),
'date': artTitleDom.xpath("//*[@class=\"date\"]/text()").get().strip(),
'author': artTitleDom.xpath("//*[@class=\"author\"]/text()").get().strip(),
'view': artTitleDom.xpath("//*[@class=\"view\"]/text()").get().strip()
}
- 实验结果及分析:
使用Scrapy框架,通过实现Spider子类方法完成对页面的请求,解析,数据筛选
- 实验总结:
通过这次获取每篇媒体报道的标题、发布时间、浏览量的实验,小组成员熟悉了scrapy爬虫框架与操作进一步具体化,不仅对爬虫的爬取规则有了一定的认识,还了解到scrapy的各种设置对爬虫的效率有着很大的影响,在实验完毕后,小组成员将合力进一步探讨与研究如何提高爬虫的效率。