为爬取网页表格数据,较容想到的常规方式是通过requests请求以及lxml解析定位获取元素,此外还可以通过pandas库的read_html直接获取表格数据,得到的将是目标网页所有table表格的list集合。那么后者看似简单的方式是不是在时间上更有效率呢,在此做一个对比分析。

  1. 目标网页
    以证监会官网披露的IPO表格为例,见链接证监会IPO申报披露信息统计

    共198页,每页信息二十条。
  2. 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秒。

  1. read_html的参数如下,io可为目标网址,match 为欲匹配的正则表达式,flavor为解析器,header为指定行标题,encoding为读入的编码格式,正确设置才能正确提取表格,否则会出现乱码。

python pd.read_html 快速爬取网页表格数据与常规请求解析方式对比相关推荐

  1. python爬虫表格table_Python基于pandas爬取网页表格数据

    以网页表格为例:https://www.kuaidaili.com/free/ 该网站数据存在table标签,直接用requests,需要结合bs4解析正则/xpath/lxml等,没有几行代码是搞不 ...

  2. python 爬虫 表格,python爬虫爬取网页表格数据

    用python爬取网页表格数据,供大家参考,具体内容如下 from bs4 import BeautifulSoup import requests import csv import bs4 #检查 ...

  3. python爬取网页表格数据匹配,python爬虫——数据爬取和具体解析

    标签:pattern   div   mat   txt   保存   关于   json   result   with open 关于正则表达式的更多用法,可参考链接:https://blog.c ...

  4. python pandas的read_html方法爬取网页表格

    要爬取的网页:网址·http://www.cnipa.gov.cn/zfwq/zftjyfx/1144737.htm 长这样的表格 爬取以上表格,保存为CSV格式. 代码实现: import pand ...

  5. python爬取网页表格数据匹配_爬取表格类网站数据并保存为excel文件

    本文转载自以下网站:50 行代码爬取东方财富网上市公司 10 年近百万行财务报表数据 https://www.makcyun.top/web_scraping_withpython6.html 主要学 ...

  6. r语言爬虫数据html表格,如何用R语言爬取网页表格数据节省一天工作时间

    今天R语言给我帮了一个大忙,简单的几行代码几乎节省了我一天的时间,小白表示R语言太有用了! 问题如下: 我想获取网页中表格里的数据,网页表格如下图 但是呢,很坑爹的是,这个表格不能复制粘贴,Ctrl+ ...

  7. selenium爬取网页表格数据并存到Excel

    简单介绍 1.登录到要爬取信息的页面 登录系统(填写账号密码)→进入表格数据所在的网页页面→定位下拉选框并进行选择→定位时间框选择日期→在选择日期时弹出的是另一个网页窗口进行选择,所以要将切换环境到日 ...

  8. Python案例学习:抓取网页表格数据解析并写入Excel

    三年多没写博客了,原因是因为我转行了,经历了很长的低谷,那段时间从不看博客,今天打开来看,回复了一些评论,很抱歉,有些网友的评论没有及时回复.最近开始想写代码了~ 最近看基金股票,想抓取一些行业当天的 ...

  9. python爬取网页代码-python爬虫爬取网页所有数据详细教程

    Python爬虫可通过查找一个或多个域的所有 URL 从 Web 收集数据.Python 有几个流行的网络爬虫库和框架.大家熟知的就是python爬取网页数据,对于没有编程技术的普通人来说,怎么才能快 ...

最新文章

  1. 禅道设置bug模板_一款热度很高的项目管理和bug工具,免费使用,可在公司推广哦...
  2. Android自定义spinner下拉框实现的实现
  3. 组织可以最大限度提高数据中心性能的五个步骤
  4. 【视频课】StyleGAN人脸生成与年龄表情编辑:原理与实践
  5. 【小白学PyTorch】17.TFrec文件的创建与读取
  6. Sim300设计手册(转)
  7. 阿加莎•克里斯蒂作品04东方快车谋杀案
  8. 编译原理(三)之语义分析
  9. java++记录+运行_记录java+testng运行selenium(三)---xml、ini、excel、日志等配置
  10. 中序线索树和后序线索树
  11. K均值聚类关于初始聚类中心的探讨
  12. linux下 apache启动、停止、重启命令
  13. ORA-01033 的解决
  14. Kettle下载国内镜像
  15. 快速排序(快排) (C语言实现)
  16. 在 Excel 中对多行多列进行条件求和
  17. 影视之观大秦帝国之裂变总结
  18. SQL按每5分钟或者10分钟分组统计数据
  19. H3C 重置cons 密码,清空配置
  20. 怎样应对秋冬季出现的腹泻等肠胃疾病

热门文章

  1. 【解决方案】-- 解决笔记本电脑外接键盘Window键失效的问题
  2. 运行Java字节码和应用使用的命令名字为_在运行字节码文件中,使用java命令,一定要给出字节码文件的扩展名.class...
  3. vue+element 导出Excel
  4. linux系统下默认目录,linux系统默认的目录意思
  5. 代码随想录算法训练营第四十二天-动态规划4|● 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 ● 416. 分割等和子集
  6. 年程序员节杂记:不虞岁月催人老,Python依旧是我驰骋天涯的良伴
  7. 【自我介绍】-关于我对学习编程的初步看法
  8. English Conversation – Checking in at an airport
  9. nginx下载文件超时
  10. 用jprofile查看hprof文件