# web_mining_final **Repository Path**: lujizhi/web_mining_final ## Basic Information - **Project Name**: web_mining_final - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-07-19 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README |项目名称|Python数据挖掘爬虫实践文档| |--|--| |项目作者|卢继志| |项目名称|yiou| |项目爬虫网站|iyiou.com| |项目说明|本次爬虫目的非用于商业价值,纯属加深课程实践,感谢“亿欧”提供的数据| ## yiou-MVP加/价值主张宣言 本项目使用scrapy框架及其crawlspider类对“亿欧网”中的“智慧城市”下的“智慧社区”的所有发布文章(供41页,606篇文章)的文章标题、发布时间、作者以及文章详细内容进行数据爬取、挖掘,并对文章标题进行词性拆分并使用stylecloud模块输出可视化词云。来解决对“智慧社区”分类下的文章进行相关内容分析的需求。 ## 数据最小可用产品 数据内容: 1.“智慧社区”模块中的41页文章内容(606篇) 2.文章标题(‘title’)、文章内容(‘content’)可视化词云 问题: 1.如何快速提炼“智慧社区”中的文章主要内容? 2.如何快速提炼“智慧社区”中的文章标题关键词? 解决方案: 1.使用pandas模块,对数据进行清洗 2.使用stylecloud模块,提取“智慧社区”中的文章内容和文章标题的热点词汇、关键词、关注点 3.使用scrapy框架中的crawlspider类,设定rules规则,快速定位爬虫位置 ## 挖掘Query参数 关键词:智慧社区 页数:41页 篇数:606篇 类别数据:title、author、pub_time、content 内容类型:5G、人工智能、大数据 ## 数据挖掘:思路方法及具体执行 #### 执行1.方法选择 ``` 爬取网站总站 top1请求(HTML) allowed_domains = ['iyiou.com'] 爬取起始页(HTML) start_urls = ['https://www.iyiou.com/Smart_Community/1.html'] ``` ``` 设置爬虫规则,即页面URL和文章详情页文章(HTML) rules = ( Rule(LinkExtractor(allow=r'.+Smart_Community/.+\.html'), follow=True), Rule(LinkExtractor(allow=r'.+p/.+\.html'), callback='parse_detail', follow=False), ) ``` ``` xpath定位(HTML+XHR) title = response.xpath('//div[@id="post_content"]/div/h1/text()').get() pub_time = response.xpath('//div[@id="post_date"]/text()').get() author = response.xpath('//div[@id="post_author"]/a/text()').get() article_content = response.xpath('//div[@id="post_description"]/p/text()').getall() ``` 相关请求反馈(XHR) ![](https://gitee.com/lujizhi/web_mining_final/raw/master/img/XHR.png) #### 执行2.单页数据+url解析 ``` url解析:“.+”表述占位符,在'.+Smart_Community/.+\.html'中,第一个“.+”域名占位,第二个“.+”表示curpage页面URL占位;在.+p/.+\.html,第一个“.+”域名占位,第二个“.+”表示文章详情URL占位。 rules = ( Rule(LinkExtractor(allow=r'.+Smart_Community/.+\.html'), follow=True), #页面链接(不需要获取具体数据,不启用回调函数callback) Rule(LinkExtractor(allow=r'.+p/.+\.html'), callback='parse_detail', follow=False), #详情页链接(需要获取具体数据,调用回调函数callback) ``` ``` 单页数据挖掘模式构建:提取文章详情页中的title、pub_time、author、article_content(关键参数) title = response.xpath('//div[@id="post_content"]/div/h1/text()').get() pub_time = response.xpath('//div[@id="post_date"]/text()').get() author = response.xpath('//div[@id="post_author"]/a/text()').get() article_content = response.xpath('//div[@id="post_description"]/p/text()').getall() ``` #### 执行3.系统设计思维 使用scrapy爬取方法,选择这一方法的原因是scrapy具有以下优点:1)scrapy 是异步的;2)采取可读性更强的 xpath 代替正则;3)强大的统计和 log 系统;4)同时在不同的 url 上爬行;5)支持 shell 方式,方便独立调试;6)写 middleware,方便写一些统一的过滤器;7)通过管道的方式存入数据库。而selenium虽然是自动化操作,但没有内置的图像比较。在QA过程中,自动化图像验证存在困难,要在Selenium中执行此操作,您需要第三方软件。Sikuli是一个常见的选择。它是一种基于图像的识别工具,可与Selenium很好地集成,但它有局限性,它必须在同一个虚拟或物理屏幕上运行,并且不能识别动画。而且没有自带的报告功能,需要第三方插件完成。而requests只能爬取静态页面。 #### 执行4.数据导出 导出的数据类型是XLSX格式,在scrapy中设定好相对应的储存路径 ![](https://gitee.com/lujizhi/web_mining_final/raw/master/img/%E5%82%A8%E5%AD%98.png) #### 执行5.数据整理 数据详情见仓库文件名为yiou.xlsx ![](https://gitee.com/lujizhi/web_mining_final/raw/master/img/%E6%95%B0%E6%8D%AE.png) ## 心得总结及感谢 此次数据挖掘实践中,使用pandas模块,对数据进行清洗,使用stylecloud模块,提取“智慧社区”中的文章内容和文章标题的热点词汇、关键词、关注点,使用scrapy框架中的crawlspider类,设定rules规则,快速定位爬虫位置。同时感谢“亿欧网”提供的内容和数据支持,同时感谢B站up主‘黑马程序员’提供的相关教学视频,帮助快速解决相关难题。