2013-07-23 33 views
1

我有一個這樣的鏈接<a href=abc.asp?xyz=foobar&baz=lookatme´_beautiful.jpg>,其中有這個不尋常的符號´,它甚至不存在於標準英文鍵盤中。 這是編輯器Ctrl+k產生的符號的鏡像反射。 所以經過我跑這個代碼在計算器發現:使用BeautifulSoup解析罕見符號

soup = BeautifulSoup.BeautifulSoup("<a href=abc.asp?xyz=foobar&baz=lookatme´_beautiful.jpg>"); 
for a in soup.findAll('a'):                  
    print a['href'] 

輸出是abc.asp?xyz=foobar&baz=lookatme,但我想有。我正在抓取的網站位於.br域中。有些作品在葡萄牙語中,即使鏈接是英文的,但這種罕見的符號可能不是有效的英文符號。任何想法或建議?

編輯:我看着那個Python字符串製作我的代表,它是大約<a href=abc.asp?xyz=foobar&baz=lookatme\xb4_beautiful.jpg>

一種方法是生產定製的正則表達式,而這個片段也是從計算器:

import re 
urls = re.findall(r'href=[\'"]?([^\'" >]+)', s) 

如果是不可能修改beautifulsoup的正則表達式,我怎麼修改上面的正則表達式來包含\xb4這個符號。 (在這兒是有問題的字符串)

+0

你能發佈一個鏈接到網頁嗎? – Blender

+0

http://stackoverflow.com/questions/499345/regular-expression-to-extract-url-from-an-html-link - 這是stackoverflow網站,這是網站我試圖刮http:// www .atlasdermatologico.com.br/listar.asp?acao = mostrar&arquivo = sweet%B4s_syndrome48.jpg - 不要查看網頁中的其他鏈接;其總額僅限於醫療專業人員。我無法將%B4s合併到我的正則表達式中,我在我的python字符串中看到了\ xb4的字符串表示形式。 – motiur

回答

0

升級到BeautifulSoup的最新版本並安裝html5lib,這是一個非常寬鬆的解析器:

import requests 
from bs4 import BeautifulSoup 

html = requests.get('http://www.atlasdermatologico.com.br/listar.asp?acao=indice').text 
soup = BeautifulSoup(html, 'html5lib') 

for a in soup.find_all('a'): 
    href = a.get('href') 

    if '\\' in repr(href): 
     print(repr(href)) 

它正確地打印出的URL與\xb4的聯繫。

+0

感謝它很好,但有一個問題,如何說服我的瀏覽器考慮http://www.atlasdermatologico.com.br/listar.asp?acao=mostrar&arquivo=wells'_syndrome7.jpg實際上是一個鏈接,即如何用%B4s替代'。在Chrome中單擊該特定鏈接可正確呈現網頁,但如果我將該鏈接放在多功能框中,則不起作用。 Python中有沒有內置的函數可以幫助我。 – motiur

0

可以包括[\ u0000- \ uFFFF]作爲重新圖案的子範圍或僅包括\ XB4爲[\ u00b4]

+0

\ ub4應該是\ xb4或\ u00b4,對嗎? \ u預計4個十六進制數字,就像你的第一個例子。 – Fredrik

+0

沒錯。剛剛編輯。 – sgun

0

你的正則表達式並不關心接下來href=,只要它以空格結束(或者是加引號),因此它\ XB4匹配,就像任何其他字符:

>>> s = "<a href=abc.asp?xyz=foobar&baz=lookatme\xb4_beautiful.jpg>" 
>>> print s.decode("latin-1") 
<a href=abc.asp?xyz=foobar&baz=lookatme´_beautiful.jpg> 
>>> urls = re.findall(r'href=[\'"]?([^\'" >]+)', s) 
>>> urls 
['abc.asp?xyz=foobar&baz=lookatme\xb4_beautiful.jpg'] 

(順便說一句, \ xb4是acute accent