Python 板


LINE

※ 引述《jenocool ()》之铭言: : class Title(SGMLParser): : name=[] : def handle_data(self, text): : if self.is_a and text !='库存页面' and text !='更多此站结果': : self.name.append(text) : for i in List.name: : print i.decode('utf-8') 看得出来你和 Python 很不熟 不过身为一个写 C++ 赚饭钱的人 我必须要先说你变数命名成这样即使 C++ 也是不及格... Anyway 常见的 markup language parser 基本上分两种 Python 2 内建的 SGMLParser 属於 SAX parser 这种 parser 是会把资料逐步读进来, 当发生事情的时候就通知你 所以举例而言, 当 SGMLParser 遇到 <a href="/">Foo<b>Bar</b>Baz</a> 会触发的事件与传入的参数依序会是 事件函式 attrs text ========================================= start_a href => '/' handle_data Foo start_b handle_data Bar end_b handle_data Baz end_a 看懂了吗?handle_data 是在每次遇到非 tag 资料时就输出 其输出的内容不是 tag pair (start 和 end) 里面包住的东西 而是该 tag 直到下一个 tag (不论是否成对) 之间的内容 所以不是有 nested tag 会让输出换行 而是你的程式根本就把它们视为独立的项目了 当你用 for 回圈把它们印出时就会一行一行分开, 因为 print 会自动加换行 那要怎麽修呢?我的建议是砍掉重练 最主要的原因是 SGMLParser 根本连官方都早已不推荐使用 如果你一定要使用 SAX parser, 至少应该用 HTMLParser https://docs.python.org/2.7/library/htmlparser.html 不过就你的输入内容而言, 反正你是要爬整个页面 那麽比较好的选择其实是改用 DOM parser 这种 parser 是会把整个资料读进来解析, 重组成完整的资料结构给你 在使用上会简单很多(因为你不需要自己维护状态) Python 内建的 XML/HTML DOM parser 叫做 ElementTree https://docs.python.org/2/library/xml.etree.elementtree.html 但是这个拿来爬 malformed HTML 容易出包 所以一般建议用第三方套件 我个人喜欢 lxml, 不过看起来你是在 Windows 上 (直觉), 应该不容易装 所以还是试试前面有人推的 BeautifulSoup 好了 有文件有范例的, 而且还有中文, 应该可以自己看吧 http://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html 什麽?你连怎麽装都不知道?什麽 easy_install 什麽 pip 都说找不到指令? 谁叫你要用 Python 2 呢, 请你改用 Python 3.4 吧 -- ╱ ̄ ̄ ̄╲ ▏◢█◣ 成龙表示: 是喔... ′/ ‵ ╰╯ ψQSWEET █◤ --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 218.161.94.175
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Python/M.1409585146.A.C6C.html
1F:推 jenocool: 谢谢你的回应 其实我程式码大部份是参考网路的 09/01 23:33
2F:→ jenocool: 所以连变数名称都没有改变 .. 09/01 23:33
3F:→ jenocool: 我测试後知道问题是在他把有TAG的地方分开了 09/01 23:34
4F:→ jenocool: 但好像也是在函式内做的,所以似乎无从下手 09/01 23:34
5F:→ jenocool: 本来想说试试看能不能纪录说每个start到end之间有几笔 09/01 23:35
6F:→ jenocool: 再把这几笔合并在一起,但这只是想法啦 没做出来 .. 09/01 23:35
7F:→ jenocool: 而我会用2版是上网查了一些教学说推荐用2版的 .. 09/01 23:36
8F:→ jenocool: 看来我应该学3版的 .. 我会重新研究看看的 谢谢你 09/01 23:36
9F:→ jenocool: 我不太了解的是 他是start跑完才跑end ? 09/01 23:37
10F:→ jenocool: 还是跑一次start跑一次end 重复下去? 09/01 23:38
11F:→ jenocool: 我想说程式是从上面执行到下面 所以是start完才end 09/01 23:38
12F:→ jenocool: 不过对於这些函式的运作原理一头雾水 .. 09/01 23:39
13F:→ jenocool: 想请问一下 安装BeautifulSoup後一直无法import 09/02 00:19
14F:→ jenocool: 出现File "C:\Python34\bs4\__init__.py", line 175 09/02 00:19
15F:→ jenocool: except Exception, e: 是哪边出了问题吗? 09/02 00:19
16F:→ jenocool: 痾 ... 又莫名奇妙可以了 09/02 00:20
17F:推 z101924512: import bs4 不行吗? 09/02 09:59
18F:推 jenocool: 原本不行 整个砍掉重灌3版就可以了 不过request装失败 09/02 16:23
19F:→ uranusjr: 是 requests 吧 09/02 17:50
20F:→ jenocool: 是requests没错 是出现同样一个问题 09/02 19:42
21F:→ swpoker: 我还是纯字串爬比较实在 09/03 09:22
22F:→ ccwang002: 你有 requests 安装失败的完整错误讯息吗?我在 win OK 09/03 11:09
23F:→ ccwang002: 另外是 BeautifulSoup4 喔,我在 win8.1 py3.4 都成功 09/03 11:13







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP