在Python中保存的文件中,如何在包含特定文本的行之后打印一行?

在Python中保存的文件中,如何在包含特定文本的行之后打印一行?,python,html,string,parsing,Python,Html,String,Parsing,我已经编写了一个Python程序来查找给定号码的手机运营商。它下载的来源(其中111222333是要查找的电话号码)并将其保存为carrier.html。在源中,载波位于[div class=“carrier\u result”]标记后面的行中。(为[and]切换,因为stackoverflow认为我正在尝试使用html格式化,而不会显示它。) 我的程序当前搜索该文件并找到包含div标记的行,但现在我需要一种方法将其后的下一行存储为字符串。我当前的代码是:您应该使用诸如或之类的HTML解析器。您

我已经编写了一个Python程序来查找给定号码的手机运营商。它下载的来源(其中111222333是要查找的电话号码)并将其保存为carrier.html。在源中,载波位于[div class=“carrier\u result”]标记后面的行中。(为[and]切换,因为stackoverflow认为我正在尝试使用html格式化,而不会显示它。)


我的程序当前搜索该文件并找到包含div标记的行,但现在我需要一种方法将其后的下一行存储为字符串。我当前的代码是:

您应该使用诸如或之类的HTML解析器。

您真正想要做的是正确地解析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()

要获取下一行,可以使用

htmlsource = open('carrier.html', 'r')
for line in htmlsource:
    if '<div class="carrier_result">' in line:
         nextline = htmlsource.next()
         print nextline
htmlsource=open('carrier.html','r')
对于htmlsource中的行:
如果“”在第行中:
nextline=htmlsource.next()
打印下一行
“更好”的方法是在
上拆分,然后得到你想要的东西,因为有时候你想要的东西可以在一行中出现。因此,如果给出错误的结果,则使用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()
data=open(“carrier.html”).read().split(“”)
对于数据中的项目:
如果项目中有“”:
打印项。拆分(“”)[-1]。拆分()

顺便说一句,如果可能的话,试着使用Python自己的web模块,比如
urllib
urllib2
,而不是调用外部
wget
,谢谢。你的答案是唯一一个没有使用beautifulsoup的答案,但既然有这么多其他答案,我可能会尝试两种方法。我尝试使用urllib,但没有成功。这是因为该网站只允许来自特定浏览器的视图(这就是我必须使用特定浏览器代理调用wget的原因)。如果有办法使用urllib和冒充浏览器代理,请告诉我,因为我不想打电话给wget。呵呵,我也注意到了这一点,我将发布一个解决方案。。。请小心,因为这可能会激怒他们。如果您查看页面下方的urllib2文档,下面有一些向请求添加http头的示例。不确定它是否适合你,但你可以试试。至于使用BeautifulSoup之类的东西,我认为理想情况下你应该使用它,但我也相信如果你试图解决的问题足够简单,就没有必要使用它们。只在builts中使用Python就可以了。你的回答很好,但是MikeyB的更有效,并且很好地利用了BeautifulSoup。你能解释一下如何使用BeautifulSoup做到这一点吗?我看了他们的网站,感到很困惑。小心“绕过”网站的控制——这可能会引起他们的愤怒。谢谢你,也谢谢你的建议。我会记住这一点,尽管我可能不得不坚持这样做,因为我还没有找到另一种方法来找到给定手机号码的运营商。你能给我解释一下如何使用这两种方法吗?
soup.find('div',{'class':'carrier\u result')。text