python爬取网页表格_python提取网页表格并保存为csv

0.

1.参考

表格标签

表格描述

定义表格的表头。

定义表格的行。

定义表格单元。

定义表格的页眉。

定义表格的主体。

定义表格的页脚。

定义用于表格列的属性。

表格元素定位

892328-20171022150848834-1257069681.jpg

参看网页源代码并没有 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]: filenames

Out[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 inenumerate(filenames):printfilename

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值