假设我的程序中有这样的html:
<p><a href="http://vancouver.en.craigslist.ca/nvn/ret/1817849271.html">F/T & P/T Sales Associate - Caliente Fashions</a> - <font size="-1"> (North Vancouver)</font></p>
<p><a href="http://vancouver.en.craigslist.ca/van/ret/1817804151.html">IMMEDIATE EMPLOYMENT WANTED!</a> - </p>
<p><a href="http://vancouver.en.craigslist.ca/nvn/ret/1817796152.html">TRAVEL AGENT</a> - <font size="-1"> (NORTH VANCOUVER)</font></p>
<p><a href="http://vancouver.en.craigslist.ca/bnc/ret/1817775400.html">Optical Sales Position</a> - <font size="-1"> (New Westminster)</font></p>
<p><a href="http://vancouver.en.craigslist.ca/van/ret/1817709780.html">Sales Clerk</a> - <font size="-1"> (Kits)</font></p>
<p><a href="http://vancouver.en.craigslist.ca/van/ret/1817676850.html">MARINE SALES</a> - <font size="-1"> (VANCOUVER ( KITS ))</font></p>
<p><a href="http://vancouver.en.craigslist.ca/van/ret/1817608506.html">Retail Sales Associate</a> - <font size="-1"> (Vancouver)</font></p>
<p><a href="http://vancouver.en.craigslist.ca/van/ret/1817573985.html">Retail with small parts appliance background</a> - </p>
<p><a href="http://vancouver.en.craigslist.ca/rds/ret/1817540938.html">Manager *Enjoyable work atmosphere</a> - <font size="-1"> (Langley Centre)</font></p>
<p><a href="http://vancouver.en.craigslist.ca/bnc/ret/1817403652.html">Team Member - Retail Store - FT</a> - <font size="-1"> (Burnaby South)</font></p>
<p><a href="http://vancouver.en.craigslist.ca/rds/ret/1817459155.html">STORE MANAGER-SHOE WAREHOUSE</a> - <font size="-1"> (South Surrey-Semiahmoo)</font></p>
<p><a href="http://vancouver.en.craigslist.ca/pml/ret/1817448777.html">Retail Sales</a> - <font size="-1"> (Coquitlam)</font></p>
如何获取文本节点的内容?最后,我想在终端中打印与此行类似的内容:
http://vancouver.en.craigslist.ca/nvn/ret/1817849271.html - TRAVEL AGENT
到目前为止,我有下面的代码可以很好地提取ref链接,但是我不确定如何提取数据本身。我正在考虑重写sgmllib.py模块中的handle_data(self, data)
,但到目前为止,我似乎还没有想出一种方法来实现它。
from sgmllib import SGMLParser
class URLLister(SGMLParser):
def reset(self):
SGMLParser.reset(self)
self.urls = []
def start_a(self, attrs):
href = [v for k, v in attrs if k == "href"]
if href:
self.urls.extend(href)
谢谢!
SGMLParser在Python 2.6中已被弃用,并将在3.0中消失。您可能希望改用HTMLParser模块。我以前从来没有用过(我总是用小汤来做这类事情),所以我想我应该学会它的工作原理。这是我整理的一个样本脚本,可以让你得到你想要的东西。
输出
Update:在完成了这个小练习之后,这个界面感觉很恶心,所以我要坚持使用更干净的BeutifulSoup库。看看亚历克斯的样本,看看是怎么做的。
我个人会用lxml。安装后,获得所需内容非常简单:
最简单的可能是BeautifulSoup(请确保使用3.0.8或更高的
3.0.*
版本,而不是3.1.*
,除非您使用的是Python 3——请参见here!)。BeautifulSoup生成unicode字符串——如果这是个问题,请确保按照您希望的方式对它们进行编码,以获得所需的字节字符串!
相关问题 更多 >
编程相关推荐