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

56280645c8bf41fe8ed866709fc80294.gif 1c67b413502c453cf8d77c6ba928d652.gif 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()

d639474250729e6cdce44173074c1a2f.png

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

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

9de432bd76ba252f2b04c65a99a184e7.png

a8bf2253785f406db738a69926844d17.gif eb7233df85b07d55b2ac4acce8a9e1c9.png

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

e040f990556bc0f7ff5cefac0a698851.gif

爬取中国大学排名

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Python的requests和BeautifulSoup库来爬取网页表格数据,并使用pandas库将数据存储为Excel文件。 具体步骤如下: 1. 使用requests库发送HTTP请求获取网页内容。 2. 使用BeautifulSoup库解析网页内容,找到表格数据所在的HTML标签。 3. 使用pandas库将表格数据转换为DataFrame对象。 4. 使用pandas库将DataFrame对象保存Excel文件。 示例代码如下: ```python import requests from bs4 import BeautifulSoup import pandas as pd # 发送HTTP请求获取网页内容 url = 'http://example.com/table.html' response = requests.get(url) # 解析网页内容,找到表格数据所在的HTML标签 soup = BeautifulSoup(response.content, 'html.parser') table = soup.find('table') # 将表格数据转换为DataFrame对象 df = pd.read_html(str(table))[0] # 将DataFrame对象保存Excel文件 df.to_excel('table.xlsx', index=False) ``` 其,`url`为要爬取的网页地址,`table`为表格数据所在的HTML标签,`df`为转换后的DataFrame对象,`table.xlsx`为保存Excel文件名。 ### 回答2: Python是一种非常强大的编程语言,它在数据分析、机器学习和虫等领域现得尤为突出。用Python爬取网页上的表格数据并存储为excel表格一个非常常见的应用场景。 Python有许多库可以用来进行网络爬取,其比较流行的是Requests和Beautiful Soup。Requests库用于向网站发送HTTP请求,Beautiful Soup用于解析HTML结构,将数据进行提取。在这个过程,还需要用到pandas库,它可以让我们以数据框的形式保存数据,并轻松地输出为excel文件。 实现步骤如下: 1. 引入必要的库 ```python import requests from bs4 import BeautifulSoup import pandas as pd ``` 2. 获取网页内容 ```python url = 'http://www.example.com' # 网页地址 response = requests.get(url) # 获取网页 soup = BeautifulSoup(response.content, 'html.parser') # 解析网页 ``` 3. 找到目标表格 在Beautiful Soup,我们可以使用Tag、Name、Attributes和CSS选择器等选择器来定位目标元素。这里我们假设表格在网页上是一个table标签,可以通过以下代码进行选择: ```python table = soup.find('table') # 找到表格 ``` 4. 解析表格内容 在找到表格后,我们可以使用Beautiful Soup的方法,将表格内容逐行读取,并保存一个二维的列表。这里我们假设头和表格数据分别存在thead和tbody标签内,可以使用以下代码来进行解析: ```python headers = [] #头 rows = [] #表格数据 # 解析头 for th in table.thead.find_all('th'): headers.append(th.text) # 解析表格数据 for tr in table.tbody.find_all('tr'): row = [] for td in tr.find_all('td'): row.append(td.text) rows.append(row) ``` 5. 将数据存储到excel 使用pandas库,可以将数据数据框的形式存储,并使用to_excel()方法将数据保存excel文件。 ```python df = pd.DataFrame(rows, columns=headers) # 创建一个数据框 df.to_excel('data.xlsx', index=False) # 保存excel文件,不包括索引列 ``` 以上是使用Python爬取网页表格数据存为Excel的基本步骤,根据实际情况,可能需要根据不同的表格结构和数据类型进行一些调整和改进。总体上,Python可以极大地简化我们从网页上提取数据的过程,为我们的数据处理和分析工作提供了高效便捷的支持。 ### 回答3: Python是一种广泛使用的编程语言,也是数据科学领域最常用的语言之一,它拥有相当丰富和实用的虫库可以方便的实现数据采集。随着现在各个网站对数据的重视和数据交互的日益普及,进行网页数据爬取也变得越来越普遍,下面就简单介绍一下Python如何实现爬取网页表格数据并进行导出到Excel。 第一步:安装相关库 Python提供的第三方库有很多,当然也有很多与网络虫有关的库,例如requests、beautifulsoup4、pandas和openpyxl等。我们需要使用到的是requests(可以帮助我们获取所需的HTML网页)和pandas(可以帮助我们将数据保存为CSV或Excel格式),如果在安装库时遇到问题可以使用pip来安装: pip install requests pip install pandas pip install openpyxl 第二步:获取网页源码 获取网页源码的常用方法是使用requests库,例如我们可以使用以下代码获取百度首页的HTML源码: import requests url = 'https://www.baidu.com/' response = requests.get(url) html = response.text 第三步:使用beautifulsoup4库获取表格元素 在获取了网页源码之后,我们需要使用beautifulsoup4库来解析HTML,从而提取出表格元素并进行处理。假设我们想要获取表格元素的所有内容,可以使用以下代码: from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'html.parser') table = soup.find('table', attrs={'class': 'table_class_name'}) 这里解释一下代码的参数,html.parser参数是HTML解析器,'table_class_name'是我们在HTML源码查找表格元素时要搜索的表格类。 第四步:将数据保存Excel文件 我们现在已经获得了网页表格元素,接下来需要将这些数据保存Excel格式的文件,我们可以使用pandas库来完成这个任务。假设我们要将数据保存Excel格式的文件,并且我们需要将头和行存储在独立的列: import pandas as pd df = pd.read_html(str(table))[0] df.to_excel(r'表格数据.xlsx', index=False, header=[ '头A', '头B', '头C']) 这是一个简单的例子,我们可以通过pandas灵活设置DataFrame来实现更多的需求。 总结 Python代码爬取网页表格数据存为Excel非常方便,在前面的例子,我们可以使用requests库获取网页源码,使用beautifulsoup4库获取表格元素,使用pandas库将数据保存Excel格式的文件,从而实现数据爬取的功能,如果涉及到页面分页或者反虫策略,需要按照实际情况进行相应的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值