前提:具备一定的HTML网页中表格知识→HTML表格-学习参考,如果表格中有唯一属性值或唯一字符串 ,则可以利用find()函数返回指定的属性或指定字符串的表格标签;如果没有,也可通过代码分别输出每个table标签查看所需表格再第几个table标签中。
例(返回指定网页的所有表格):
html_table = request.urlopen('网址')
soup1 = BeautifulSoup(html_table, "lxml")
table_list = soup1.find_all("table")
i = 0
for i in range(len(table_list)):
print("table%d" % i)
print(table_list[i])
示例:从中国地震台网网页中采集全球最新的地震分别数据
网页界面(局部)如下:
具体代码:
from urllib import request
from bs4 import BeautifulSoup
with request.urlopen("http://www.ceic.ac.cn") as html:
soup = BeautifulSoup(html.read(), "lxml")
column = soup.find_all(["th", "td"]) # 返回表格的th和td标签列表
column_list = list(map(lambda x: x.get_text(), column)) # 通过一个自定义的匿名函数利用get_text()方法获取标签中的文本信息
field_number = 6 # 定义一个的变量来表示表格字段数
row_number = int(len(column_list)/field_number) # 通过计算获取表格总行数
s = ""
for row in range(0, row_number): # 通过循环提取表格列表中的文本,相加成一个字符串,每一行记录六个字段(值)后加回车,输出
for col in range(0, field_number):
s = s + " " + column_list[field_number*row + col]
s = s + "\n"
print(s)
输出结果:
若想将获取的地震数据直接保存到Excel表中,可利用 xlwt包 将数据写入到一个Excel表中→Excel文件读写-学习参考。代码如下:
from urllib import request
from bs4 import BeautifulSoup
import xlwt
with request.urlopen("http://www.ceic.ac.cn") as html:
soup = BeautifulSoup(html.read(), "lxml")
column = soup.find_all(["th", "td"])
column_list = list(map(lambda x: x.get_text(), column))
field_number = 6
row_number = int(len(column_list)/field_number)
# 以下为将数据写入Excel表的代码:
table = xlwt.Workbook()
sheet1 = table.add_sheet("earthquake")
for row in range(0, row_number):
r = sheet1.row(row)
for col in range(0, field_number):
w = column_list[field_number*row + col]
r.write(col, w)
table.save("D:/tmp/dz.xls")
(PS:重新获取一遍地震台网上的数据写入Excel后,发现第一条数据更新(○´・д・)ノ咱云南普洱江城的地震,可见地球发生地震的频率之高啊啊)
勤学勤练,方能实现 (ง •_•)ง