博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python提取网页表格并保存为csv
阅读量:4561 次
发布时间:2019-06-08

本文共 2492 字,大约阅读时间需要 8 分钟。

0.

 

1.参考

表格标签

表格 描述
定义表格
定义表格标题。
定义表格的表头。
定义表格的行。
定义表格单元。
定义表格的页眉。
定义表格的主体。
定义表格的页脚。
定义用于表格列的属性。
定义表格列的组。

 

 

表格元素定位

参看网页源代码并没有 thead 和 tbody。。。

  
  
    
    
    
    
    
    
    
    
    
    
    
  
  
    
List of text editors
Name Creator First public release Latest stable version Latest Release Date Programming language Cost (US$) Software license Open source Cli available Minimum installed size

2.提取表格数据

表格标题可能出现超链接,导致标题被拆分,

也可能不带表格标题。。

Text editor support for remote file editing over   network protocols 

 

表格内容换行

   Plan 9    and   Inferno 

 

tag 规律

table        
thead tr1 th th th th
tbody tr2 td/th td
tbody tr3 td/th
tbody tr3 td/th

 

2.1提取所有表格标题列表

filenames = []for index, table in enumerate(response.xpath('//table')):    caption = table.xpath('string(./caption)').extract_first()    #提取caption tag里面的所有text,包括子节点内的和文本子节点,这样也行 caption = ''.join(table.xpath('./caption//text()').extract())    filename = str(index+1)+'_'+caption if caption else str(index+1)  #xpath 要用到 table 计数,从[1]开始    filenames.append(re.sub(r'[^\w\s()]','',filename))    #移除特殊符号In [233]: filenamesOut[233]:[u'1_List of text editors', u'2_Text editor support for various operating systems', u'3_Available languages for the UI', u'4_Text editor support for common document interfaces', u'5_Text editor support for basic editing features', u'6_Text editor support for programming features (see source code editor)', u'7_Text editor support for other programming features', '8', u'9_Text editor support for key bindings', u'10_Text editor support for remote file editing over network protocols', u'11_Text editor support for some of the most common character encodings', u'12_Right to left (RTL)  bidirectional (bidi) support', u'13_Support for newline characters in line endings']

 

2.2每个表格分别写入csv文件

for index, filename in enumerate(filenames):    print filename    with open('%s.csv'%filename,'wb') as fp:        writer = csv.writer(fp)        for tr in response.xpath('//table[%s]/tr'%(index+1)):            writer.writerow([i.xpath('string(.)').extract_first().replace(u'\xa0', u' ').strip().encode('utf-8','replace') for i in tr.xpath('./*')])  #xpath组合,限定 tag 范围,tr.xpath('./th | ./td')

 

代码处理 .replace(u'\xa0', u' ')

使用 'w' 写csv文件,会出现如下问题,使用'wb' 即可解决问题

所有表格写入同一excel文件的不同工作表 sheet,需要使用xlwt

 

转载于:https://www.cnblogs.com/my8100/p/save_html_table_to_csv.html

你可能感兴趣的文章
pgsql查询优化之模糊查询
查看>>
不变模式
查看>>
20181227 新的目标
查看>>
androidtab
查看>>
php 事件驱动 消息机制 共享内存
查看>>
剑指offer 二叉树的bfs
查看>>
LeetCode Maximum Subarray
查看>>
让我们再聊聊浏览器资源加载优化
查看>>
underscore demo
查看>>
CSS hack
查看>>
浏览器全屏之requestFullScreen全屏与F11全屏
查看>>
软件包管理:rpm命令管理-安装升级与卸载
查看>>
旋转图像
查看>>
每日一小练——数值自乘递归解
查看>>
qq登陆错误提示
查看>>
bzoj 1192: [HNOI2006]鬼谷子的钱袋 思维 + 二进制
查看>>
没写完,没调完,咕咕咕的代码
查看>>
Android Studio使用技巧:导出jar包
查看>>
Problem E. TeaTree - HDU - 6430 (树的启发式合并)
查看>>
Kafka序列化和反序列化与示例
查看>>