一 目的
爬取NBA球星的数据并对数据进行分析和统计。
二 流程
三 准备工作
1 在pycharm中下载requests和lmxl库(终端中输入pip install requests 和pip install lmxl)。
2 在Edge的扩展中下载xpath插件(图1),用于后面代码位置的确定。
四 网页爬取
1 首先打开虎扑进入NBA球员排行榜,点击F12进入开发者模式,点击Network,在Name中寻找players的文件,在Headers中找到Request URL(图2)和User-Agent(图3)(Request URL是告诉计算机要请求的网页的地址,也就是你希望从中获取信息的网站页面的网址。User-Agent是对你访问网站的设备的介绍,用于防止被网站发现我在爬虫)。
2 打开pycharm写代码用于访问网站(图4),运用了lmxl和requests库。目的:lmxl库的用途是处理HTML内容,requests库的用途是发送请求获取响应。
第2,3行是导入所需模块
第6行是目标网页的URL
第9,10,11行构造请求头,模拟浏览器请求
第14行是发送HTTP GET请求,获取网页内容
3 打开插件xpath,输入//table,他会提取所有的信息但是有的信息我们不用,所以我们进行筛选。(图5)
右键点击需要爬取的排名,会出现图6。发现排名的位于players_table中因为排名在tr列的第一个td中,并且我们需要爬取的是文本。
所以对所有信息筛选的代码为‘ //table[@class="players_table"]//tr/td[1]/text() ’(图7)
4 以此类推,剩下的信息就是第2 3 4列分别为姓名 球队 得分(图8)。
5 爬取数据。(图9)
nos = e.xpath('//table[@class="players_table"]//tr/td[1]/text()'):这行代码使用XPath表达式来选取HTML文档中所有class属性为"players_table"的表格中每一行的第一个单元格中的文本内容,并将结果存储在名为nos的变量中。
names = e.xpath('//table[@class="players_table"]//tr/td[2]/a/text()'):这行代码使用XPath表达式来选取HTML文档中所有class属性为"players_table"的表格中每一行的第二个单元格中链接的文本内容(通常是球员的姓名),并将结果存储在名为names的变量中。
teams = e.xpath('//table[@class="players_table"]//tr/td[3]/a/text()'):这行代码使用XPath表达式来选取HTML文档中所有class属性为"players_table"的表格中每一行的第三个单元格中链接的文本内容(通常是球员所属球队的信息),并将结果存储在名为teams的变量中。
scores = e.xpath('//table[@class="players_table"]//tr/td[4]/text()'):这行代码使用XPath表达式来选取HTML文档中所有class属性为"players_table"的表格中每一行的第四个单元格中的文本内容(通常是球员的得分信息),并将结果存储在名为scores的变量中。
6 因为此时提出的信息太乱(图10),不规整。所以我们将让提取的信息进行美化。
代码使用了 `zip()` 函数,它可以将多个可迭代对象(例如列表)中的元素一一对应地打包成元组的形式。在这里,`zip()` 函数同时迭代了四个列表 `nos`、`names`、`teams` 和 `scores`,将它们中对应位置的元素打包成元组。然后,使用 `for` 循环遍历这些元组,每次循环得到一个元组,元组中的元素分别表示某个球员的排名、姓名、球队和得分。最后,通过 `print()` 函数打印了每个球员的排名、姓名、球队和得分。(图11)
6 输出的结果。(图12)