提取HTML 内容

很多公司都提供网页查询的功能,但是不会对公众开发API,所以很多时候,都只能通过解析html来得到我们想要的数据。大部分情况下,只有部分的HTML是有用的。 这就需要将我们需要的部分,提取出来。比较地道的英文是HTML Scraping,直译过来是刮削,就是这个玩意: Scraper 所以很多XBMC插件的中文是某某刮削器。。。

HTML提取比较流行的工具有:

  • lxml.html
  • beautifulsoup
  • re(Regular Expression)

lxml.html的样例有使用XPath,所以决定先通过lxml.html试试,能否到达想要的效果,也顺便复习一下XPatch。

使用lxml的html 包来提取HTML中的内容

直接上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
>>> from lxml import html
>>> tree = html.parse('ems.html').getroot()
>>> delivery = tree.xpath('//table[@id="showTable"]/tr/td/text()')

>>> for i, data in enumerate(delivery):
>>>     delivery[i] = data.strip()

>>> for data in delivery:
>>>     print data

2015-11-10
06:40:00
收寄
荷兰

2015-11-11
08:03:00
离开处理中心,发往中国 北京
荷兰

>>> delivery = tree.xpath('//table[@id="showTable"]/tr')
>>> for tr in delivery:
>>>     for td in tr.itertext():
>>>         status += td.strip() + ' '
>>>     status += '\n'
    
 2015-11-10  06:40:00  收寄  荷兰    
 2015-11-11  08:03:00  离开处理中心,发往中国 北京  荷兰    
 2015-11-12  10:12:00  收寄  荷兰

curl作为最常用的HTTP client模拟工具,基本的用法还是要了解的。

HTTP POST

-d 需要Post的数据,或通过@引用本地文件 -H 更改请求头,如果Headers有多行,可以添加多个-H -b 添加cookie,字符串或文件,如果有多个cookie以分号分隔

1
2
3
4
5
curl -v -d @text.xml -H "Content-Type: text/xml;charset=UTF-8;" 127.0.0.1:5000

curl -v -d 'mailNum=EA038500686NL&checkCode=981937' -b 'JSESSIONID=C7LZWGGccR1h9lQChCGnVKPV9R01qFwfnQhpvRGNVpDsysx2pJ4F!-554346888; path=/; HttpOnly; BIGipServerweb_pool=168493834.40735.0000; path=/;' http://www.ems.com.cn/ems/order/singleQuery_t


HTTP GET

1
2
3
curl -v "http://127.0.0.1:5000/?signature=bafb00117d9775162f1084df40f39bfc23b6d61c&echostr=1159902683469627124&timestamp=1446156884&nonce=331675590"

curl -v http://www.ems.com.cn/ems/order/singleQuery_old?mailNum=EA038500686NL&checkCode=3977649360132055014

更改Bash History历史命令总数

通过C-r查找历史命令的时候,之前用过的命令没有了… 发现默认的bashrc配置,只记录最近的1000条命令; 下面是如何修改history命令数:

1
2
3
4
vi ~/.bashrc
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) 
HISTSIZE=5000 
HISTFILESIZE=5000