2013-06-05 72 views
1

我想要做的是提取姓名和電話號碼,在這個網站:使用Python從網頁

http://www.yellowpages.com/memphis-tn/gift-shops

我想提取車間及其相關的電話號碼,一個名CSV。例如,第一個條目應該是:

巴布科克禮品,(901)763-0700

等。

我使用Python。執行完urllib2.urlopen()之後,我有了整個blurb。我如何處理這些文字以達到我的目標?

+1

[BeautifulSoup(http://www.crummy.com/software/BeautifulSoup/)將幫助您解析HTML,讓你使用XML解析器可能是一個更容易和更強大的需要 – RedBaron

回答

0

我會建議使用正則表達式,並在行中的獨特內容。

IE:

<a href="http://www.yellowpages.com/memphis-tn/mip/babcock-gifts-14131113?lid=187490699" class="url " data-analytics="{&quot;click_id&quot;:1600,&quot;rank&quot;:1,&quot;act&quot;:1,&quot;FL&quot;:&quot;list&quot;,&quot;position&quot;:0}" title="Babcock Gifts">Babcock Gifts</a> 

你會使用這樣的:

re_name=re.compile('<a href=.*class=\"url\".*') 
re_front=re.compile('^.*title="') 
re_back=re.compile('".*') 
for line in page: 
if re_name.search(line): 
    out = re.front.sub('',line) 
    out = re.back.sub('',line) 
print out 
+1

。正則表達式通常不鼓勵解析html – rednaw

+0

我不知道如何使用XML解析器。你能指點我一個Python教程嗎? – trycatch22

+0

http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html – Ian

0

我試圖BeautifulSoup

import urllib 
import re 
from BeautifulSoup import * 
url = 'http://www.yellowpages.com/memphis-tn/gift-shops' 

u = urllib.urlopen(url) 
soup = BeautifulSoup(u) 

test = soup.findAll('div', {'class':"info"}) 

for each in test: 
    aref = each.findAll('a',{'class':"url "}) 
    phone = each.findAll('span',{'class':"business-phone phone"}) 
     x = re.sub(r'[^0-9]',"",str(phone)) 
    print aref[0]['title'] + " - " + x 

我通過查看HTML頁面的源代碼衍生的這個腳本。我找到了包含列表的'div'部分。然後,每個公司都列在標籤中,我在'aref'中找到了這些標籤。

奇怪的是,我拿起'手機',但文本包含整個字符串包括標籤。我不知道爲什麼。所以,我用一個正則表達式來替換除數字之外的所有東西,這些數字構成了電話號碼。

這裏是美麗的文檔。 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html