0.

1.参考

W3C HTML 表格

表格标签

表格 描述
<table> 定义表格
<caption> 定义表格标题。
<th> 定义表格的表头。
<tr> 定义表格的行。
<td> 定义表格单元。
<thead> 定义表格的页眉。
<tbody> 定义表格的主体。
<tfoot> 定义表格的页脚。
<col> 定义用于表格列的属性。
<colgroup> 定义表格列的组。

表格元素定位

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

<table class="wikitable sortable" style="text-align: center; font-size: 85%; width: auto; table-layout: fixed;">
  <caption>List of text editors</caption>
  <tr>
    <th style="width: 12em">Name</th>
    <th>Creator</th>
    <th>First public release</th>
    <th data-sort-type="number">Latest stable version</th>
    <th>Latest Release Date</th>
    <th><a href="/wiki/Programming_language" title="Programming language">Programming language</a></th>
    <th data-sort-type="currency">Cost (<a href="/wiki/United_States_dollar" title="United States dollar">US$</a>)</th>
    <th><a href="/wiki/Software_license" title="Software license">Software license</a></th>
    <th><a href="/wiki/Free_and_open-source_software" title="Free and open-source software">Open source</a></th>
    <th><a href="/wiki/Command-line_interface" title="Command-line interface">Cli available</a></th>
    <th>Minimum installed size</th>
  </tr>
  <tr>
    <th

2.提取表格数据

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

也可能不带表格标题。。

<caption>Text editor support for remote file editing over 
  <a href="/wiki/Lists_of_network_protocols" title="Lists of network protocols">network protocols</a>
</caption>

表格内容换行

<td>
  <a href="/wiki/Plan_9_from_Bell_Labs" title="Plan 9 from Bell Labs">Plan 9</a>
   and
  <a href="/wiki/Inferno_(operating_system)" title="Inferno (operating system)">Inferno</a>
</td>

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',
'',
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' ')

HTML转义字符&npsp;表示non-breaking space,unicode编码为u'\xa0',超出gbk编码范围?

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

【已解决】Python中通过csv的writerow输出的内容有多余的空行 – 在路上

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

python ︰ 创建 excel 工作簿和倾倒 csv 文件作为工作表

python提取网页表格并保存为csv的更多相关文章

  1. Python读取网页表格数据

    学会了从网格爬取数据,就可以告别从网站一页一页复制表格数据的时代了. 说个亲身经历的事: 以前我的本科毕业论文是关于"燃放烟花爆竹和空气质量"之间关系的,就要从环保局官网查资料. ...

  2. python提取分析表格数据

    #/bin/python3.4# -*- coding: utf-8 -*- import xlrd def open_excel(file="file.xls"): try: d ...

  3. python爬取昵称并保存为csv

    代码: import sys import io import re sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030') ...

  4. python爬取信息并保存至csv

    import csv import requests from bs4 import BeautifulSoup res=requests.get('http://books.toscrape.com ...

  5. 使用python 提取网页的特定数据转

    http://blog.csdn.net/nwpulei/article/details/7272832

  6. Python:提取网页中的电子邮箱

    import requests, re #regex = r"([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)"#这个正则表达式过滤 ...

  7. Python使用Tabula提取PDF表格数据

    今天遇到一个批量读取pdf文件中表格数据的需求,样式大体是以下这样: python读取PDF无非就是三种方式(我所了解的),pdfminer.pdf2htmlEX 和 Tabula.综合考虑后,选择了 ...

  8. python笔记之提取网页中的超链接

    python笔记之提取网页中的超链接 对于提取网页中的超链接,先把网页内容读取出来,然后用beautifulsoup来解析是比较方便的.但是我发现一个问题,如果直接提取a标签的href,就会包含jav ...

  9. python学习笔记——爬虫中提取网页中的信息

    1 数据类型 网页中的数据类型可分为结构化数据.半结构化数据.非结构化数据三种 1.1 结构化数据 常见的是MySQL,表现为二维形式的数据 1.2 半结构化数据 是结构化数据的一种形式,并不符合关系 ...

随机推荐

  1. BZOJ 3456: 城市规划 与 多项式求逆算法介绍(多项式求逆, dp)

    题面 求有 \(n\) 个点的无向有标号连通图个数 . \((1 \le n \le 1.3 * 10^5)\) 题解 首先考虑 dp ... 直接算可行的方案数 , 容易算重复 . 我们用总方案数减 ...

  2. 2733: [HNOI2012]永无乡 线段树合并

    题目: https://www.lydsy.com/JudgeOnline/problem.php?id=2733 题解: 建n棵动态开点的权值线段树,然后边用并查集维护连通性,边合并线段树维护第k重 ...

  3. 时间序列分析模型——ARIMA模型

    时间序列分析模型——ARIMA模型 一.研究目的 传统的经济计量方法是以经济理论为基础来描述变量关系的模型.但经济理论通常不足以对变量之间的动态联系提供一个严密的说明,而且内生变量既可以出现在方程的左 ...

  4. vue 自定义marquee无缝滚动组件

    先上效果图: (1) 看起来可能有点卡顿,但是实际上页面上看起来挺顺畅的. (2) 思路就是获取每一个列表的宽度,设置定时器移动列表,当移动的距离达到一个列表的宽度的时候,把这个距离放到数组的最后.这 ...

  5. 微信小程序之动态添加、删除指定内容(view)和获取input值

    这次遇到个问题: 1. 动态的添加指定的view内容..嗯..很简单..wx:for就搞定 2. 动态添加的内容中有input,最终获取值的时候,要获取到所有input的值并且是一个数组..嗯.. 3 ...

  6. 老男孩Python全栈学习 S9 日常作业 005

    1.有如下变量,请实现要求的功能 tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age& ...

  7. MapReduce-FileInputFormat

    在运行 MapReduce 程序时,输入的文件格式包括:基于行的日志文件.二进制格式文件.数据库表等.那么,针对不同的数据类型,MapReduce 是如何读取这些数据? FileInputFormat ...

  8. Quartz.net 3.x使用总结(二)——Db持久化和集群

    上一篇简单介绍了Quartz.net的概念和基本用法,这一篇记录一下Quartz.net通过数据库持久化Trigger和Jobs等数据,并简单配置Quartz.net的集群. 1.JobStore介绍 ...

  9. TPS、并发用户数、吞吐量关系

    TPS.并发用户数.吞吐量关系 摘要 主要描述了在性能测试中,关于TPS.并发用户数.吞吐量之间的关系和一些计算方法. loadrunner TPS 目录[-] 一.系统吞度量要素: 二.系统吞吐量评 ...

  10. Codeforces Round #501 (Div. 3) D. Walking Between Houses

    题目链接 题意:给你三个数n,k,sn,k,sn,k,s,让你构造一个长度为k的数列,使得相邻两项差值的绝对值之和为sss, ∑i=1n∣a[i]−a[i−1]∣,a[0]=1\sum_{i=1}^n ...