学期:2021-2022学年第一学期

    学 院 大数据与智能工程学院 年 级、 专 业、 班 18级数据科学与大数据技术(专升本)一班 姓 名
    学号
    实验项目 名称 Scrapy框架的应用—获取每篇媒体报道的标题,发布时间,浏览量

    实验学时: 3h 同组学生姓名: 王美琴、尤博欣、周青青、李昕辰 实验地点: 9317
    实验日期: 实验成绩: 批改教师: 批改时间:
    指导教师评阅:

    1. 实验目的:使用Scrapy框架编写爬虫,获取每篇媒体报道的标题,发布时间,浏览量
    2. 实验原理:Scrapy框架、xpath网页解析、re正则表达式检索
    3. 实验环境 :win11、python3.9、vscode、edge
    4. 实验步骤:
      1. 创建爬虫框架
      2. 创建Spider子类
      3. 实现Spider子类方法以达到爬虫功能

    核心代码:

    1. import re
    2. import scrapy
    3. class QuotesSpider(scrapy.Spider):
    4. name = "tipdm"
    5. start_urls = [
    6. "http://www.tipdm.com/gsxw/index_51.jhtml"
    7. ]
    8. def parse(self, response):
    9. # 获取本页的所有子页链接
    10. itemsDom = response.xpath("//*[@class=\"item clearfix noImg \"]")
    11. for itemDom in itemsDom:
    12. contentPageUrl = re.search("href=\"(.*?)\"", itemDom.get()).group(1)
    13. yield scrapy.Request(contentPageUrl, self.parseContent)
    14. # 获取下一页URL并递归
    15. currPageClassOnclick = response.xpath("//*[@class=\"currPageClass\"]/following-sibling::a[1]/@onclick").get()
    16. if currPageClassOnclick is None:
    17. return
    18. nextUrlPart = re.search("\'(.*?)\'", currPageClassOnclick).group(1)
    19. yield scrapy.Request(f"{response.url[0:response.url.rfind('/')]}/{nextUrlPart}", self.parse)
    20. def parseContent(self, response):
    21. artTitleDom = response.xpath("//*[@class=\"artTitle\"]")
    22. yield {
    23. 'id': re.search(r"/(\d+)", response.url).group(1),
    24. 'title': artTitleDom.xpath("h1/text()").get(),
    25. 'date': artTitleDom.xpath("//*[@class=\"date\"]/text()").get().strip(),
    26. 'author': artTitleDom.xpath("//*[@class=\"author\"]/text()").get().strip(),
    27. 'view': artTitleDom.xpath("//*[@class=\"view\"]/text()").get().strip()
    28. }
    1. 实验结果及分析:

    使用Scrapy框架,通过实现Spider子类方法完成对页面的请求,解析,数据筛选

    1. 实验总结:

    通过这次获取每篇媒体报道的标题、发布时间、浏览量的实验,小组成员熟悉了scrapy爬虫框架与操作进一步具体化,不仅对爬虫的爬取规则有了一定的认识,还了解到scrapy的各种设置对爬虫的效率有着很大的影响,在实验完毕后,小组成员将合力进一步探讨与研究如何提高爬虫的效率。