Chinaunix

标题: 如何用shell获取html网页中指定的文本数据 [打印本页]

作者: sofs    时间: 2015-08-30 21:35
标题: 如何用shell获取html网页中指定的文本数据
本帖最后由 sofs 于 2015-08-30 21:39 编辑

我要获取这个网页  best.pconline.com.cn
里面的主题列表的 标题,链接,发布时间,如下图:

请问怎么用shell(tr sed  awk grep 等linux中默认存在的命令)实现?

求教,谢谢。

QQ截图20150830212810.jpg (170.39 KB, 下载次数: 94)

QQ截图20150830212810.jpg

作者: jason680    时间: 2015-08-30 22:37
Xidel is a command line tool to download and extract data from HTML/XML pages as well as JSON APIs .

http://videlibri.sourceforge.net/xidel.html
作者: sofs    时间: 2015-08-31 01:56
研究了很久,没搞定……
作者: tuyajie    时间: 2015-08-31 09:39
你看你能不能把页面抓下来我们一起讨论讨论~~

作者: reb00t    时间: 2015-08-31 09:55
本帖最后由 reb00t 于 2015-08-31 23:12 编辑
  1. import sys
  2. from lxml import etree
  3. reload(sys)
  4. sys.setdefaultencoding("utf8")
  5. import requests
  6. r = requests.get('http://best.pconline.com.cn/')
  7. html =  r.text
  8. xmlhtml  =  etree.HTML(html)
  9. content = xmlhtml.xpath('//div[starts-with(@id,"topic")]/div[1]/a[2]/text()')
  10. urllist = xmlhtml.xpath('//div[starts-with(@id,"topic")]/div[1]/a[2]/@href')
  11. lastime  = xmlhtml.xpath('//div[starts-with(@id,"topic")]/div[2]/div[2]/span[2]/text()')

  12. data_text = [ text for text in content ]
  13. data_url  = [ url for url in urllist ]
  14. data_time = [ t.strip() for t in lastime ]

  15. for i  in  xrange(0, len(data_text), 1):
  16.         print "%s, %s, %s"  % (data_text[i], data_url[i], data_time[i])
复制代码
结果:
2岁啦!聚超值2周年庆之线下沙龙活动   , http://best.pconline.com.cn/youhui/157456.html, 08-27 11:52
LifeVC小芙 足底按摩器-揉捏型, http://best.pconline.com.cn/youhui/159049.html, 08-31 22:51
Thomas Friends托马斯和朋友之 宝宝的第一个托马斯BCX71, http://best.pconline.com.cn/youhui/159048.html, 08-31 22:00
LifeVC丽芙家居 碳钢 双层 洗衣机置物架, http://best.pconline.com.cn/youhui/159047.html, 08-31 21:16

...
...
作者: sofs    时间: 2015-08-31 13:59
回复 4# tuyajie


    用curl或者wget保存页面到本地再进行分析也可以
作者: sofs    时间: 2015-08-31 14:00
回复 5# reb00t


    boot哥,搞定了吗?
作者: sofs    时间: 2015-08-31 20:07
我又搞了好久,还是没搞出来
作者: sofs    时间: 2015-08-31 20:07
我又搞了好久,还是没搞出来
作者: MMMIX    时间: 2015-08-31 22:33
回复 9# sofs


    shell 脚本做这个实在不是什么合适的选择;还是看看其他对解析 html 有更好支持的编程语言吧。
作者: sofs    时间: 2015-09-01 13:34
那Python能搞的定吗?


回复 10# MMMIX


   
作者: MMMIX    时间: 2015-09-01 14:06
回复 11# sofs


    没问题.
作者: sofs    时间: 2015-09-01 16:50
Python一窍不通
能帮我实现下么?我好学习学习。


回复 12# MMMIX


   
作者: MMMIX    时间: 2015-09-01 16:51
sofs 发表于 2015-09-01 16:50
Python一窍不通


学呗
作者: sofs    时间: 2015-09-01 16:58
现在只有为实现这个需求,其他地方也用不到Python
暂时也没时间学,为解决这个问题而去学一门语言……
算了


回复 14# MMMIX


   
作者: sofs    时间: 2015-09-01 17:17
回复 6# sofs


    boot哥,收到。

刚刚才看到,我一直是在刷第二页回复,没想到你是编辑了之前的回复。

谢谢了
作者: csoho2000    时间: 2015-09-01 17:19
本帖最后由 csoho2000 于 2015-09-01 17:19 编辑

我想的大概思路(用自带的一些命令)
1.下载源网页文件到本地 wget
2.把网页当文件处理,针对你所需内容确认有没有什么关键
字段可用,然后使用grep awk等命令来处理

这样好像比较麻烦....
作者: sofs    时间: 2015-09-01 17:43
怎么我运行的时候报错了。。。
如下:

Traceback (most recent call last):
  File "test.py", line 18, in <module>
    print "%s, %s, %s"  % (data_text, data_url, data_time)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-6: ordinal not in range(12


第四行
sys.setdefaultencoding("utf8"

我也尝试过改为sys.setdefaultencoding("utf-8"

依然报错。

我的是Python 2.6.6



回复 5# reb00t


   
作者: sofs    时间: 2015-09-01 17:44
嗯,我思路大概也是这样的

现在在研究用boot的Python代码了 。。。

回复 17# csoho2000


   
作者: sofs    时间: 2015-09-01 18:15
搞定啦!
哈哈。

谢谢reboot哥

回复 18# sofs


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2