数据技术应用概论
第一章 绪论
数据素质培养意义
数据技术
数据科学应用体系框架
第二章 计算机信息系统
计算机信息系统的构成
计算机信息系统技术路线
第三章 抽样技术
抽样技术概述
网络调查和社会调查
抽样学习
抽样技术的基本概念
第四章 网络爬虫与文本数据生成
网络爬虫概述
网络爬虫技术操作
文本数据生成
第五章 数据库技术
数据库技术概述
数据库系统开发
关系数据库
数据仓库
第六章 SQL语言
SQL概述
SQL关系定义
SQL查询基本结构
数据库修改
视图
第七章 数据预处理技术
数据预处理概述
数据清理
数据集成
数据规约
数据变换
第八章 回归模型
回归模型的基础知识
最小二乘法
其他常用回归模型
第九章 Logistic建模技术
基础知识
梯度上升算法
第十章 关联规则挖掘
关联规则挖掘的基础知识
关联规则挖掘的 Apriori 算法
其它常用关联规则挖掘算法
第十一章 决策树分类规则
决策树分类规则的基础知识
决策树分类规则挖掘的ID3算法
几种常用的决策树
第十二章 K-平均聚类
基础知识
基于划分的K‐平均聚类算法
其他常用的聚类
第十三章 神经网络模型
神经网络模型的基础知识
误差逆传播算法
其他常用的神经网络算法
第十四章 支持向量机
支持向量机的基础知识
支持向量机的SMO算法
其他常用的支持向量机算法
第十五章 集成学习算法
集成学习算法的基础知识
随机森林算法
其他常用的集成学习算法
第十六章 数据可视化
数据可视化的基础知识
可视化设计基础
数据可视化工具
-
+
首页
网络爬虫技术操作
## 4.2 网络爬虫技术操作 #### 实验环境 例如,你可以通过使用本平台在线工具进行学习。- 以下练习使用本平台在线工具进行学习。 地址:首页->工作台[【快捷链接】](https://zenodt.com/workbench "【快捷链接】"),点击 _1717661367.png) 按钮,登录即可。 ### 4.2.1 网络爬虫实现环境 - 网络爬虫算法编写一般步骤为: -> 1.分析网页分页结构,找出网页链接地址在分页中的变化规律,为网络爬虫实 现自动分页提供依据。 -> 2.分析网站源码结构,找出待抓取数据所在代码段。 -> 3.根据代码段分析etree结构,写出XPath表达式。 -> 4.编写网络爬虫代码 ### 4.2.2 网络爬虫具体实现流程及源码 以爬取某影评网站Top 250部电影评分信息为例,总待抓取电影数量为250部。算法编程步骤如下: 以下是对每个步骤的详细说明和可能的实现方式: 网站地址:https://movie.douban.com/top250 #### 步骤 1:分析网页分页结构 首先,访问 `https://movie.douban.com/top250` 这个网址。观察页面的布局和导航元素,找到表示分页的部分。通常,分页可能通过页码链接、“上一页”“下一页”按钮或者其他特定的标识来实现。 比如,可能会发现页面底部有类似于 “1 2 3 4 5... 25” 这样的页码链接,或者有 “上一页” “下一页” 的按钮,并且对应的链接地址具有一定的规律。 通过分析这些分页元素,可以确定如何获取每一页的 URL 以进行后续的抓取操作。 例如,如果页码链接的形式是 `https://movie.douban.com/top250?page=n` (其中 `n` 表示页码),那么就可以通过循环生成不同的页码来获取每一页的内容。 #### 步骤 2:分析网站源码结构 使用浏览器的开发者工具(通常可以通过右键点击页面并选择“检查”或按 F12 键打开)来查看网页的源代码。 重点关注包含电影评分信息的部分。可能会发现评分信息存在于特定的 HTML 标签中,比如 `<div>` 、 `<span>` 等,并且具有特定的类名或属性,用于标识和区分。 比如,电影评分可能被包含在一个具有 `class="rating_num"` 的 `<span>` 标签中。 通过仔细分析源码结构,可以确定如何使用编程语言中的解析库(如 Python 中的 BeautifulSoup 或 lxml)来准确地提取所需的评分信息。 #### 步骤 3:根据代码段分析 etree 结构 如果选择使用 lxml 库来解析 HTML 文档,就需要根据之前分析的源码结构来构建相应的 etree(元素树)结构。 通过 lxml 的 `html.fromstring()` 方法将获取到的 HTML 文本转换为 etree 对象。 然后,利用 etree 的遍历和查找方法(如 `xpath` 表达式)来定位到包含评分信息的节点。 例如,如果评分信息在具有 `class="rating_num"` 的 `<span>` 标签中,可以使用以下 `xpath` 表达式来获取: `//span[@class="rating_num"]` 。 通过这样的方式,就能够准确地从 etree 结构中提取出每部电影的评分信息,并进行后续的处理和存储。 - 该示例的完整Python代码如下所示: ```python import requests from lxml import etree import time # 定义要爬取的 URL url = "https://movie.douban.com/top250" def crawl_douban_top250(): all_movie_info = [] page = 1 while True: current_url = f"{url}?page={page}" response = requests.get(current_url) if response.status_code == 200: html = etree.HTML(response.text) results = html.xpath('//div[@class="item"]') for eachr in results: # 提取电影标题 title = eachr.xpath('.//div[@class="hd"]/a/span[@class="title"]/text()')[0] # 提取导演及演员 director_and_actors = eachr.xpath('.//div[@class="bd"]/p/text()')[0].strip() # 提取评分 rating = eachr.xpath('.//span[@class="rating_num"]/text()')[0] # 提取评论人数 comment_count = eachr.xpath('.//div[@class="star"]/span[last()]/text()')[0].strip() movie_info = { "title": title, "director_and_actors": director_and_actors, "rating": rating, "comment_count": comment_count } all_movie_info.append(movie_info) # 判断是否已经到了最后一页 if len(results) < 25: break page += 1 # 为了避免请求过于频繁,设置一个小的时间间隔 time.sleep(1) else: print(f"Failed to fetch page {page}, status code: {response.status_code}") break return all_movie_info if __name__ == "__main__": movie_info_list = crawl_douban_top250() for movie_info in movie_info_list: print("Title: {}".format(movie_info['title'])) print("Director and Actors: {}".format(movie_info['director_and_actors'])) print("Rating: {}".format(movie_info['rating'])) print("Comment Count: {}".format(movie_info['comment_count'])) print("-" * 30) ```
张龙
2024年8月12日 14:51
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码