使用python爬取网页表格 python爬取网页表格到excel_使用python爬取网页表格

使用python爬取网页表格 python爬取网页表格到excel_使用python爬取网页表格_02

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 =  'http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html'    html = getHTMLText(url) 
fillUnivList(uinfo, html)    printUnivList(uinfo, 549)#想打印多少数据自己输入num的值main()

使用python爬取网页表格 python爬取网页表格到excel_使用python爬取网页表格_03

可以看到,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爬取网页表格 python爬取网页表格到excel_使用python爬取网页表格_04


使用python爬取网页表格 python爬取网页表格到excel_使用python爬取网页表格_05

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