首先,尝试使用.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
-
正版软件
- 小青账如何隐藏默认账本?小青账隐藏默认账本教程
- 小青账如何隐藏默认账本?小青账是一款非常实用且强大的记账软件,为广大用户提供了方便的记账功能。不少用户对如何隐藏默认账本感到困惑,下面小编将介绍小青账隐藏默认账本的操作方法。还不知道的小伙伴快来看看吧!
-
昨天 03-22 13:05
0
-
正版软件
- 如何使用讯飞星火生成ppt?利用讯飞星火AI生成高质量ppt教程
- 讯飞星火怎么生成高质量ppt?你是否曾经在深夜里为第二天的工作汇报而焦头烂额,翻遍互联网寻找灵感和模板,又或者因为繁琐的排版和设计而感到力不从心?现在,有了讯飞星火AI生成PPT,你的所有烦恼都将一扫而光!
-
昨天 03-22 12:52
0
-
正版软件
- 搜狐视频怎么投屏到电视播放?搜狐视频app电视投屏方法教程
- 搜狐视频怎么投屏到电视播放?有时候我们在看电视的时候会觉得怕屏幕不够大,看的不大清楚,这时候就会想如果有个大屏幕就好了,今天小编教你们如何用搜狐视频投屏到电视上,彻底的解放双手。搜狐视频app电视投屏教程1、首先打开搜狐视频app,搜索想看的视频或影视剧2、进入详情页后点击有TV字样的图标3、然后搜索附近的设备连接我们的电视4、当电视上出现了手机正在播放的
-
昨天 03-22 12:38
0
-
正版软件
- 豆瓣怎么设置主页不可见?豆瓣设置隐私主页教程
- 豆瓣怎么设置主页不可见?大家在使用豆瓣的时候,经常会在主页发布自己的心情状态、吐槽等等内容,然后其他用户进我们的主页的时候就能很轻松的看到我们发过的内容,那么我们能不能设置主页的隐私呢?要怎么设置呢?下面小编就为大家介绍一下豆瓣个人主页设置隐私的办法。
-
昨天 03-22 10:50
0
-
正版软件
- 夸克浏览器怎么设置电脑模式?夸克浏览器设置成电脑模式教程
- 夸克浏览器怎么设置电脑模式?嘿,兄弟们,你是否曾经需要在手机上看网页,但又要让页面显示效果如同在电脑上的体验?如果是,那么恭喜您,夸克浏览器就是您的不二之选!它不仅拥有简洁明了的界面设计,而且夸克浏览器手机版也可以轻松设置成电脑版,让你在手机端也能够享受到如同在电脑上的浏览体验。
-
前天 03-21 12:02
0
|