如何在Python中打印包含特定文本的行之后的行?
我写了一个Python程序,可以根据手机号码找到它的运营商。这个程序会下载一个网页的内容,网址是http://www.whitepages.com/carrier_lookup?carrier=other&number_0=1112223333&response=1(这里的1112223333是要查找的电话号码),然后把这个内容保存为carrier.html。在这个网页的源代码中,运营商的信息在[div class="carrier_result"]标签的下一行。(这里的<和>要替换成[和],因为stackoverflow以为我在用html格式,所以不显示。)
我现在的程序可以找到包含div标签的那一行,但我需要一种方法来把它后面的那一行存储为一个字符串。我的当前代码是:http://pastebin.com/MSDN0vbC
3 个回答
2
你应该使用一个 HTML 解析器,比如 BeautifulSoup
或者 lxml
来处理 HTML 内容。
2
要获取下一行,你可以使用
htmlsource = open('carrier.html', 'r')
for line in htmlsource:
if '<div class="carrier_result">' in line:
nextline = htmlsource.next()
print nextline
一种“更好”的方法是根据 </div>
来拆分内容,然后获取你想要的东西,因为有时候你想要的内容可能会全部在一行里。所以使用 next() 可能会得到错误的结果。例如
data=open("carrier.html").read().split("</div>")
for item in data:
if '<div class="carrier_result">' in item:
print item.split('<div class="carrier_result">')[-1].strip()
顺便说一下,如果可以的话,尽量使用 Python 自带的网络模块,比如 urllib
和 urllib2
,而不是调用外部的 wget
。
4
你真正想要做的是正确地解析HTML。可以使用BeautifulSoup这个库,它在这方面非常出色。
示例代码:
import urllib2, BeautifulSoup
opener = urllib2.build_opener()
opener.addheaders[0] = ('User-agent', 'Mozilla/5.1')
response = opener.open('http://www.whitepages.com/carrier_lookup?carrier=other&number_0=1112223333&response=1').read()
bs = BeautifulSoup.BeautifulSoup(response)
print bs.findAll('div', attrs={'class': 'carrier_result'})[0].next.strip()