600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > beautifulsoup爬取网页中的表格_PYTHON爬取数据储存到excel

beautifulsoup爬取网页中的表格_PYTHON爬取数据储存到excel

时间:2024-02-21 22:18:23

相关推荐

beautifulsoup爬取网页中的表格_PYTHON爬取数据储存到excel

PYTHON爬取数据储存到excel

大家周末好呀,我是滑稽君。前两天上网课时朋友发来消息说需要爬取一些数据,然后储存到excel里。记得我公众号里发过关于爬虫的文章,所以找我帮个忙。于是滑稽君花时间研究了一下完成了这个任务。那本期滑稽君就与大家分享一下在爬取完数据之后,如何储存在excel里面的问题。

先说一下我的大概思路。因为之前已经写了一些爬虫工具,我们稍加修改就可以直接使用。重点是数据如果储存到excel里,并且实现自动换行。没有人的数据是全部列在一行的。根据我大PYTHON“除了不会生孩子,其他的什么都会”定理。在查找资料时,我'顺理成章'的找到了“xlwt”这样一个python用来与excel玩耍的库。那它都能干啥呢?它可以实现创建表单、写入指定单元格、指定单元格样式等人工实现的功能,一句话就是人使用excel实现的功能,这个扩展包都可以实现。我们以之前爬取中国大学排名的代码为例子。

源代码:

import requestsfrom bs4 import BeautifulSoupimport bs4import xlwtdef getHTMLText(url): #抓取网页 try: r = requests.get(url, timeout = 30) #设置超时时间为30秒 r.raise_for_status() #异常情况 r.encoding = r.apparent_encoding #替换编码 return r.text except: return ""def fillUnivList(ulist, html): #提取关键信息添加到列表(核心功能) soup = BeautifulSoup(html, "html.parser") for tr in soup.find('tbody').children: #tr的子标签里可能含有字符串,影响我们抓取下一所大学的信息 if isinstance(tr, bs4.element.Tag): #我们过滤掉非标签信息的其他信息 tds = tr('td') #将所有的td标签存为新的tds列表 ulist.append([tds[0].string,tds[1].string,tds[2].string,tds[3].string]) #抓取标签之间的内容,这一步我们可以控制想要抓取的信息#重点内容开始,写入excel,及自动换行def printUnivList(ulist, num): workbook = xlwt.Workbook() #创建工作表 # 创建工作表worksheet,填入表名 worksheet = workbook.add_sheet('中国排名爬取')h=0#设置变量h来代替行数 #print("{:^10}\t\t{:^6}\t\t{:^10}\t\t{:^10}".format("排名","学校名称","省份","总分")) for i in range (num): u = ulist[i] #print("{:^10}\t\t{:^6}\t\t{:^10}\t\t{:^10}".format(u[0], u[1], u[2], u[3]))#在表中写入相应的数据, worksheet.write(h, 0, u[0]) #排名 worksheet.write(h, 1, u[1]) #学校 worksheet.write(h, 2, u[2]) #所在地 worksheet.write(h, 3, u[3]) #综合 h=h+1 # 保存表 workbook.save('hello2.xls')def main(): uinfo = [] url = '/zuihaodaxuepaiming.html' html = getHTMLText(url) fillUnivList(uinfo, html) printUnivList(uinfo, 549)#想打印多少数据自己输入num的值main()

可以看到,31-32行代码中我们把爬来的数据放入列表,然后打印出来。我们现在需要把列表里的值打印到excel单元格中 。worksheet.write(0, 0, 'hello world')的功能就是在第一行第一列插入'hello world'。前两个数字分别代表行和列。大家记住他这里是从0开始算的。我们期望打印出排名、学校、所在地、综合评分这4个信息。也就是说我们在输入4次之后需要换行来输入下一所学校的基本信息。怎么解决呢?

我们定义一个变量h=0,让它代表行,打印4条信息为一个循环,每循环一次我们让h+1以此来实现我们自动换行的功能。到处我们需要的功能都实现了,运行可以看到当前目录下出现了一个excel表格。打开可以看到里面就是我们想要的信息。我们总共爬取了500多条学校的信息。这要是一条条的人工输入得到什么时候。还好我们有python,我们只需编写好代码,剩下的体力活都交给python就OK啦。

如果你的python环境里没有这个第三方库,你还需要做的一件事就是打开CMD,输入'pip install xlwt'。

爬取中国大学排名

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。