首先,尝试使用.querySelectorAll()方法在浏览器控制台上选择第一个员工的名字。这个方法的一个真正有用的特性是,可以越来越深入地实现大于(>)符号的层次结构,以定义父元素(在左侧)和要获取的子元素(在右侧)。
元素,这些元素就会成为节点列表。因为不能依赖类来获取每个单元格,所以只需要知道它们在索引中的位置,而第一个name是0。 从那里,可以像这样编写代码: for row in rows:
name = row.find_all('td')[0].text
print(name) 简单地说,逐个获取每一行,并找到其中的所有单元格,一旦有了列表,只获取索引中的第一个单元格(position 0),然后使用.text方法只获取元素的文本,忽略不需要的HTML数据。 
这是一个包含所有员工姓名的列表! 对于其余部分,只需要遵循同样的逻辑: position = row.find_all('td')[1].text
office = row.find_all('td')[2].text
age = row.find_all('td')[3].text
start_date = row.find_all('td')[4].text
salary = row.find_all('td')[5].text 然而,将所有这些数据输出在控制台上并没有太大帮助。与其相反,可以将这些数据存储为一种、更有用的新格式。 4.将表格数据存储到JSON文件中 虽然可以轻松地创建一个CSV文件并将数据发送到那里,但如果可以使用抓取的数据创建一些新内容,那么这将不是最容易管理的格式。 尽管如此,以前做的一个项目解释了如何创建一个CSV文件来存储抓取的数据。 好消息是,Python有自己的JSON模块来处理JSON对象,所以不需要安装任何程序,只需要导入它。 import json 但是,在继续并创建JSON文件之前,需要将所有这些抓取的数据转换为一个列表。为此,将在循环外部创建一个空数组。 employee_list = [] 然后向它追加数据,每个循环向数组追加一个新对象。 employee_list.append({'Name': name,'Position': position,'Office': office,'Age': age,'Start date': start_date,'salary': salary }) 如果print(employee_list),其结果如下: Employee_List 还是有点混乱,但已经有了一组准备转换为JSON的对象。 注:作为测试,输出employee_list的长度,它返回57,这是抓取的正确行数(行现在是数组中的对象)。 将列表导入到JSON只需要两行代码: with open('json_data', 'w') as json_file:
json.dump(employee_list, json_file, indent=2) - 首先,打开一个新文件,传入想要的文件名称(json_data)和'w',因为想要写入数据。
- 接下来,使用.dump()函数从数组(employee_list)和indent=2中转储数据,这样每个对象都有自己的行,而不是所有内容都在一个不可读的行中。
5.运行脚本和完整代码 如果一直按照下面的方法做,那么代码库应该是这样的: #dependencies
import requests
from bs4 import BeautifulSoup
import json
url = 'http://api.scraperapi.com?api_key=51e43be283e4db2a5afbxxxxxxxxxxx&url=https://datatables.net/examples/styling/stripe.html'
#empty array
employee_list = []
#requesting and parsing the HTML file
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
#selecting the table
table = soup.find('table', class_ = 'stripe')
#storing all rows into one variable
for employee_data in table.find_all('tbody'):
rows = employee_data.find_all('tr')
#looping through the HTML table to scrape the data
for row in rows:
name = row.find_all('td')[0].text
position = row.find_all('td')[1].text
office = row.find_all('td')[2].text
age = row.find_all('td')[3].text
start_date = row.find_all('td')[4].text
salary = row.find_all('td')[5].text
#sending scraped data to the empty array
employee_list.append({
'Name': name,
'Position': position,
'Office': office,
'Age': age,
'Start date': start_date,
'salary': salary
})
#importing the array to a JSON file
with open('employee_data', 'w') as json_file:
json.dump(employee_list, json_file, indent=2) 注:在这里为场景添加了一些注释。 以下是JSON文件中的前三个对象: 
以JSON格式存储抓取数据允将信息用于新的应用程序 使用Pandas抓取HTML表 在离开页面之前,希望探索第二种抓取HTML表的方法。只需几行代码,就可以从HTML文档中抓取所有表格数据,并使用Pandas将其存储到数据框架中。 在项目的目录中创建一个新文件夹(将其命名为panda-html-table-scraper),并创建一个新文件名pandas_table_scraper.py。 打开一个新的终端,导航到刚刚创建的文件夹(cdpanda-html-table-scraper),并从那里安装pandas: pip install pandas 在文件的顶部导入它。 import pandas as pd Pandas有一个名为read_html()的函数,它主要抓取目标URL,并返回所有HTML表作为DataFrame对象的列表。 要实现这一点,HTML表至少需要结构化,因为该函数将查找 之类的元素来标识文件中的表。为了使用这个函数,需要创建一个新变量,并将之前使用的URL传递给它: employee_datapd.read_html('http://api.scraperapi.com?api_key=51e43be283e4db2a5afbxxxxxxxxxxxx&url=https://datatables.net/examples/styling/stripe.html') 当输出它时,它将返回页面内的HTML表列表。 HTMLTables 如果比较DataFrame中的前三行,它们与采用BeautifulSoup抓取的结果完全匹配。 为了处理JSON,Pandas可以有一个内置的.to_json()函数。它将把DataFrame对象列表转换为JSON字符串。 而所需要做的就是调用DataFrame上的方法,并传入路径、格式(split,data,records,index等),并添加缩进以使其更具可读性: employee_data[0].to_json('./employee_list.json', orient='index', indent=2) 如果现在运行代码,其结果文件如下: Resulting File 注意,需要从索引([0])中选择表,因为.read_html()返回一个列表,而不是单个对象。 以下是完整的代码以供参考 import pandas as pd
employee_data = pd.read_html('http://api.scraperapi.com?api_key=51e43be283e4db2a5afbxxxxxxxxxxxx&url=https://datatables.net/examples/styling/stripe.html')
employee_data[0].to_json('./employee_list.json', orient='index', indent=2) 有了这些新知识,就可以开始抓取网络上几乎所有的HTML表了。只要记住,如果理解了网站的结构和背后的逻辑,就没有什么是不能抓取的。 也就是说,只要数据在HTML文件中,这些方法就有效。如果遇到动态生成的表,则需要找到一种新的方法。 原文标题:How to Use Python to Loop Through HTML Tables and Scrape Tabular Data,作者:Zoltan Bettenbuk
本文转载于:https://www.51cto.com/article/745148.html 如有侵犯,请联系admin@zhengruan.com删除
-
正版软件
- PHP中的图像压缩和优化算法
- 随着互联网时代的到来,网络图片成为了日常生活中不可或缺的一部分。而在网页加载速度、用户体验和服务器带宽占用等方面,图片的大小和质量都是至关重要的。因此,图像压缩和优化成为了一个不容忽视的问题。在PHP中,有许多图像处理库和函数可用于图像压缩和优化。本文将介绍几种常见的压缩和优化算法,并逐一分析它们的优劣势。图像压缩算法1.1等比例压缩等比例压缩算法是最基本
-
10分钟前
PHP编程
优化算法
图像压缩
0
-
正版软件
- 如何解决Python的代码中的命名重复错误?
- Python是一种高级编程语言,越来越受到开发者们的青睐。在Python编程中,可能会遇到一些头疼的问题,比如命名重复错误。命名重复错误是指在同一个程序中使用了相同的变量名或函数名,导致程序出错或者无法正常运行。那么,该如何解决Python代码中的命名重复错误呢?本文将介绍几种解决方法。一、使用不同的变量名或函数名命名重复错误最常见的解决方法就是使用不同的变
-
25分钟前
Python 命名重复
0
-
正版软件
- 使用JUnit单元测试框架Mock 静态方法
- 如何使用JUnit单元测试框架Mock静态方法:PowerMock:添加PowerMock依赖项。使用@PrepareForTest注解指定要Mock的静态方法。使用EasyMock来Mock静态方法。EasyMock:导入EasyMock类。使用EasyMock.mockStatic()方法Mock静态方法。使用expect()方法设置预期值,使用replay()方法执行调用。
-
50分钟前
单元测试
mock
0
-
正版软件
- Nginx如何实现404自动跳转到首页
- 404自动跳转到首页server{location/{error_page404=@ops-coffee;}location@ops-coffee{rewrite.*/permanent;}}网站出现404页面不是特别友好,我们可以通过上边的配置在出现404之后给自动跳转到首页去
-
1小时前 16:30
nginx
0
-
正版软件
- Java函数的资源消耗如何度量?
- 在Java中度量函数资源消耗的方法是使用Java微基准,具体步骤包括:导入微基准库。创建基准测试类。配置基准测试。运行基准测试。通过使用此方法,我们可以度量函数的执行时间和内存消耗,从而优化性能和管理资源。
-
1小时前 16:14
Java
资源消耗
0
|