码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-10-22 21:11:48      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:空行   targe   mes   install   writer   creating   源代码   sys   replace   

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]:
[u1_List of text editors,
 u2_Text editor support for various operating systems,
 u3_Available languages for the UI,
 u4_Text editor support for common document interfaces,
 u5_Text editor support for basic editing features,
 u6_Text editor support for programming features (see source code editor),
 u7_Text editor support for other programming features,
 8,
 u9_Text editor support for key bindings,
 u10_Text editor support for remote file editing over network protocols,
 u11_Text editor support for some of the most common character encodings,
 u12_Right to left (RTL)  bidirectional (bidi) support,
 u13_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

标签:空行   targe   mes   install   writer   creating   源代码   sys   replace   

原文地址:http://www.cnblogs.com/my8100/p/save_html_table_to_csv.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!