python pd.read_html 快速爬取网页表格数据与常规请求解析方式对比
为爬取网页表格数据,较容想到的常规方式是通过requests请求以及lxml解析定位获取元素,此外还可以通过pandas库的read_html直接获取表格数据,得到的将是目标网页所有table表格的list集合。那么后者看似简单的方式是不是在时间上更有效率呢,在此做一个对比分析。
- 目标网页
以证监会官网披露的IPO表格为例,见链接证监会IPO申报披露信息统计
共198页,每页信息二十条。 - requests请求+lxml解析+xpath定位
from lxml import etree
import pandas as pd
from pandas import DataFrame
import time
import requests
import randomdef pagedataget(html):items=html.xpath('//*[@class="timeborder"]')compname=[];publish_date=[];ssdbk=[];pubtype=[];pubinfo=[]for item in items :name=str(item.xpath('./td/text()')[0]).replace('\r','').replace('\n','').replace('\t','')name=''.join(name.split()) if name:compname.append(name)date=str(item.xpath('./td/text()')[1]).replace('\r','').replace('\n','').replace('\t','')publish_date.append(date)sb=str(item.xpath('./td/text()')[2]).replace('\r','').replace('\n','').replace('\t','')ssdbk.append(sb)pt=str(item.xpath('./td/text()')[3]).replace('\r','').replace('\n','').replace('\t','')pubtype.append(pt)pinf=item.xpath('./td/a/text()')if len(pinf)==2:pinf=str(pinf[0]).replace('\r','').replace('\n','').replace('\t','')+'、'+str(pinf[1]).replace('\r','').replace('\n','').replace('\t','')else:pinf=str(pinf[0]).replace('\r','').replace('\n','').replace('\t','')pubinfo.append(pinf) ipopub=pd.concat([DataFrame(compname),DataFrame(publish_date),DataFrame(ssdbk),DataFrame(pubtype),DataFrame(pubinfo)],axis=1)ipopub.columns=['compname','publish_date','ssdbk','pubtype','pubinfo']return ipopub
if __name__ == '__main__':start = time.time()user_agent_list = ["Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Firefox/61.0","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36"]header={'User-Agent':'Mozilla/5.0'}ipopub=DataFrame(data=None,columns=['compname','publish_date','ssdbk','pubtype','pubinfo'])for i in range(1,199):header['User-Agent'] = random.choice(user_agent_list)pageurl='http://eid.csrc.gov.cn/ipo/infoDisplay.action?pageNo='+str(i)+'&temp=&temp1=&blockType=byTime'header['User-Agent'] = random.choice(user_agent_list)tx=requests.get(pageurl,headers=header)tx.encoding=tx.apparent_encodinghtml = etree.HTML(tx.text)ipopub=pd.concat([ipopub,pagedataget(html)]) ipopub.index=range(0len(ipopub)+1)end = time.time()print ('一共有',len(ipopub),'家公司,'+'运行时间为',(end-start)/60,'分钟')
3. pd.read_html
import time
start = time.time()
import pandas as pd
from pandas import DataFrame
pubtable=DataFrame(data=None,columns=['compname','publish_date','ssdbk','pubtype','pubinfo'])
for i in range(1,199): url ='http://eid.csrc.gov.cn/ipo/infoDisplay.action?pageNo='+str(i)+'&temp=&temp1=&blockType=byTime'data = pd.read_html(url,header=0,encoding='utf-8')[2] pub = data.iloc[0:len(data)-1,0:-1]pub.columns=['compname','publish_date','ssdbk','pubtype','pubinfo']pubtable=pd.concat([pubtable,pub])
end = time.time()
print ('一共有',len(pubtable),'家公司,'+'运行时间为',(end-start)/60,'分钟')
可见直接通过read_html获取表格数据速度更快,省了40秒。
- read_html的参数如下,io可为目标网址,match 为欲匹配的正则表达式,flavor为解析器,header为指定行标题,encoding为读入的编码格式,正确设置才能正确提取表格,否则会出现乱码。
python pd.read_html 快速爬取网页表格数据与常规请求解析方式对比相关推荐
- python爬虫表格table_Python基于pandas爬取网页表格数据
以网页表格为例:https://www.kuaidaili.com/free/ 该网站数据存在table标签,直接用requests,需要结合bs4解析正则/xpath/lxml等,没有几行代码是搞不 ...
- python 爬虫 表格,python爬虫爬取网页表格数据
用python爬取网页表格数据,供大家参考,具体内容如下 from bs4 import BeautifulSoup import requests import csv import bs4 #检查 ...
- python爬取网页表格数据匹配,python爬虫——数据爬取和具体解析
标签:pattern div mat txt 保存 关于 json result with open 关于正则表达式的更多用法,可参考链接:https://blog.c ...
- python pandas的read_html方法爬取网页表格
要爬取的网页:网址·http://www.cnipa.gov.cn/zfwq/zftjyfx/1144737.htm 长这样的表格 爬取以上表格,保存为CSV格式. 代码实现: import pand ...
- python爬取网页表格数据匹配_爬取表格类网站数据并保存为excel文件
本文转载自以下网站:50 行代码爬取东方财富网上市公司 10 年近百万行财务报表数据 https://www.makcyun.top/web_scraping_withpython6.html 主要学 ...
- r语言爬虫数据html表格,如何用R语言爬取网页表格数据节省一天工作时间
今天R语言给我帮了一个大忙,简单的几行代码几乎节省了我一天的时间,小白表示R语言太有用了! 问题如下: 我想获取网页中表格里的数据,网页表格如下图 但是呢,很坑爹的是,这个表格不能复制粘贴,Ctrl+ ...
- selenium爬取网页表格数据并存到Excel
简单介绍 1.登录到要爬取信息的页面 登录系统(填写账号密码)→进入表格数据所在的网页页面→定位下拉选框并进行选择→定位时间框选择日期→在选择日期时弹出的是另一个网页窗口进行选择,所以要将切换环境到日 ...
- Python案例学习:抓取网页表格数据解析并写入Excel
三年多没写博客了,原因是因为我转行了,经历了很长的低谷,那段时间从不看博客,今天打开来看,回复了一些评论,很抱歉,有些网友的评论没有及时回复.最近开始想写代码了~ 最近看基金股票,想抓取一些行业当天的 ...
- python爬取网页代码-python爬虫爬取网页所有数据详细教程
Python爬虫可通过查找一个或多个域的所有 URL 从 Web 收集数据.Python 有几个流行的网络爬虫库和框架.大家熟知的就是python爬取网页数据,对于没有编程技术的普通人来说,怎么才能快 ...
最新文章
- 禅道设置bug模板_一款热度很高的项目管理和bug工具,免费使用,可在公司推广哦...
- Android自定义spinner下拉框实现的实现
- 组织可以最大限度提高数据中心性能的五个步骤
- 【视频课】StyleGAN人脸生成与年龄表情编辑:原理与实践
- 【小白学PyTorch】17.TFrec文件的创建与读取
- Sim300设计手册(转)
- 阿加莎•克里斯蒂作品04东方快车谋杀案
- 编译原理(三)之语义分析
- java++记录+运行_记录java+testng运行selenium(三)---xml、ini、excel、日志等配置
- 中序线索树和后序线索树
- K均值聚类关于初始聚类中心的探讨
- linux下 apache启动、停止、重启命令
- ORA-01033 的解决
- Kettle下载国内镜像
- 快速排序(快排) (C语言实现)
- 在 Excel 中对多行多列进行条件求和
- 影视之观大秦帝国之裂变总结
- SQL按每5分钟或者10分钟分组统计数据
- H3C 重置cons 密码,清空配置
- 怎样应对秋冬季出现的腹泻等肠胃疾病
热门文章
- 【解决方案】-- 解决笔记本电脑外接键盘Window键失效的问题
- 运行Java字节码和应用使用的命令名字为_在运行字节码文件中,使用java命令,一定要给出字节码文件的扩展名.class...
- vue+element 导出Excel
- linux系统下默认目录,linux系统默认的目录意思
- 代码随想录算法训练营第四十二天-动态规划4|● 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 ● 416. 分割等和子集
- 年程序员节杂记:不虞岁月催人老,Python依旧是我驰骋天涯的良伴
- 【自我介绍】-关于我对学习编程的初步看法
- English Conversation – Checking in at an airport
- nginx下载文件超时
- 用jprofile查看hprof文件