2016-06-23 2 views
1

Я ищу использовать BeautifulSoup4 и либо URLLIB или запросы, чтобы очистить некоторые документы, но некоторые из них имеют & NBSP в вместо обычных пространств. В некоторых из этих документов, есть такие строки следующий:BeautifulSoup4 Преобразование HTML сущности (неразрывный пробел?) Перед началом поиска (Python 3.X)

"Pursuant to&nbspthe requirements&nbspof Section&nbsp13..." 

, но они могут быть размещены в любом месте, поэтому они должны быть заменены пробелами, например:

"Pursuant to the requirements of Section 13...." 

Мне нужно, чтобы заменить их прежде чем я сделать soup.find(), так что-то вроде этого:

#code to get request from server goes here 

soup=BeautifulSoup(requestedPage) 
#remove nbsp 
sectionRequired=soup.find(text=re.compile("Pursuant to the requirements of Section 13")) 

Как я смог заменить & NBSP пространства с нормальными пробелами в веб-страницу дО Я использую BS4 найти функцию, поэтому я могу выполнить строковое совпадение в файле soup.find()?

ответ

1

Вы можете использовать html.parser.unescape():

import html.parser as hp 
import re 

data = response.text 
soup = BeautifulSoup(hp.unescape(data), "lxml") 

p = soup.find(text=re.compile("Pursuant to the requirements of Section 13")) 
print(p) 

Почему текст не удается это есть символ новой строки также, следующее регулярное выражение работы:

p = soup.find(text=re.compile("Pursuant\s+to\s+the\s+requirements\s+of\s+Section\s+13")) 

Запуск его:

In [15]: url = "https://www.sec.gov/Archives/edgar/data/1800/000110465907013496/a07-1583_110k.htm" 

In [16]: response = requests.get(url, headers={ 
    ....:  "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" 
    ....: }) 

In [17]: data = response.text 

In [18]: soup = BeautifulSoup(hp.unescape(data), "lxml") 

In [19]: p = soup.find(text=re.compile("Pursuant\s+to\s+the\s+requirements\s+of\s+Section\s+13")) 

In [20]: print(p) 
Pursuant to the 
requirements of Section 13 or 15(d) of the Securities Exchange Act of 
1934, Abbott Laboratories has duly caused this report to be signed on its 
behalf by the undersigned, thereunto duly authorized. 

После Pursuant to the появляется новая строка, поэтому ваш текст не может совпадать. Использование \s+ будет работать для любых пробелов. Невыполнение также не требуется, текстовое совпадение будет работать нормально.

Чтобы получить вторую таблицу после того, как:

table = p.find_next("table").find_next("table") 

Что дает:

<table border="0" cellpadding="0" cellspacing="0" style="border-collapse:collapse;"> 
<tr style="page-break-inside:avoid;"> 
<td style="padding:0pt .7pt 0pt 0pt;width:210.0pt;" valign="top" width="280"> 
<p style="font-size:10.0pt;margin:0pt 0pt .0001pt;"><!-- SET mrlNoTableShading -->/s/ MILES D. 
    WHITE</p> 
</td> 
<td style="padding:0pt .7pt 0pt 0pt;width:30.0pt;" valign="top" width="40"> 
<p style="margin:0pt 0pt .0001pt;"><font face="Times New Roman" size="2" style="font-size:1.0pt;"> </font></p> 
</td> 
<td style="padding:0pt .7pt 0pt 0pt;width:215.7pt;" valign="top" width="288"> 
<p style="margin:0pt 0pt .0001pt;"><font face="Times New Roman" size="2" style="font-size:10.0pt;">/s/ ROXANNE S. 
    AUSTIN</font></p> 
</td> 
</tr> 
<tr style="page-break-inside:avoid;"> 
<td style="border:none;border-top:solid windowtext 1.0pt;padding:0pt .7pt 0pt 0pt;width:210.0pt;" valign="top" width="280"> 
<p style="font-size:10.0pt;margin:0pt 0pt .0001pt;"><!-- SET mrlHTMLTableFull --><!-- SET mrlNoTableShading -->Miles D. White<br/> 
    Chairman of the Board, Chief Executive<br/> 
    Officer and Director of Abbott Laboratories<br/> 
    (principal executive officer)</p> 
</td> 
<td style="padding:0pt .7pt 0pt 0pt;width:30.0pt;" valign="top" width="40"> 
<p style="margin:0pt 0pt .0001pt;"><font face="Times New Roman" size="2" style="font-size:1.0pt;"> </font></p> 
</td> 
<td style="border:none;border-top:solid windowtext 1.0pt;padding:0pt .7pt 0pt 0pt;width:215.7pt;" valign="top" width="288"> 
<p style="margin:0pt 0pt .0001pt;"><font face="Times New Roman" size="2" style="font-size:10.0pt;">Roxanne S. Austin<br/> 
    Director of Abbott Laboratories</font></p> 
</td> 
</tr> 
<tr style="page-break-inside:avoid;"> 
<td style="border:none;border-bottom:solid windowtext 1.0pt;padding:0pt .7pt 0pt 0pt;width:210.0pt;" valign="top" width="280"> 
<p style="margin:24.0pt 0pt .0001pt;"><font face="Times New Roman" size="2" style="font-size:10.0pt;">/s/ RICHARD A. GONZALEZ</font></p> 
</td> 
<td style="padding:0pt .7pt 0pt 0pt;width:30.0pt;" valign="top" width="40"> 
<p style="margin:24.0pt 0pt .0001pt;"><font face="Times New Roman" size="2" style="font-size:1.0pt;"> </font></p> 
</td> 
<td style="border:none;border-bottom:solid windowtext 1.0pt;padding:0pt .7pt 0pt 0pt;width:215.7pt;" valign="top" width="288"> 
<p style="margin:24.0pt 0pt .0001pt;"><font face="Times New Roman" size="2" style="font-size:10.0pt;">/s/ WILLIAM M. DALEY</font></p> 
</td> 
</tr> 
<tr style="page-break-inside:avoid;"> 
<td style="border:none;padding:0pt .7pt 0pt 0pt;width:210.0pt;" valign="top" width="280"> 
<p style="margin:0pt 0pt .0001pt;"><font face="Times New Roman" size="2" style="font-size:10.0pt;">Richard A. Gonzalez<br/> 
    President and Chief Operating Officer<br/> 
    and Director of Abbott Laboratories</font></p> 
</td> 
<td style="padding:0pt .7pt 0pt 0pt;width:30.0pt;" valign="top" width="40"> 
<p style="margin:0pt 0pt .0001pt;"><font face="Times New Roman" size="2" style="font-size:1.0pt;"> </font></p> 
</td> 
<td style="border:none;padding:0pt .7pt 0pt 0pt;width:215.7pt;" valign="top" width="288"> 
<p style="margin:0pt 0pt .0001pt;"><font face="Times New Roman" size="2" style="font-size:10.0pt;">William M. Daley<br/> 
    Director of Abbott Laboratories</font></p> 
</td> 
</tr> 
<tr style="page-break-inside:avoid;"> 
<td style="border:none;border-bottom:solid windowtext 1.0pt;padding:0pt .7pt 0pt 0pt;width:210.0pt;" valign="top" width="280"> 
<p style="margin:24.0pt 0pt .0001pt;"><font face="Times New Roman" size="2" style="font-size:10.0pt;">/s/ THOMAS C. FREYMAN</font></p> 
</td> 
<td style="padding:0pt .7pt 0pt 0pt;width:30.0pt;" valign="top" width="40"> 
<p style="margin:0pt 0pt .0001pt;"><font face="Times New Roman" size="2" style="font-size:1.0pt;"> </font></p> 
</td> 
<td style="border:none;border-bottom:solid windowtext 1.0pt;padding:0pt .7pt 0pt 0pt;width:215.7pt;" valign="bottom" width="288"> 
<p style="margin:0pt 0pt .0001pt;"><font face="Times New Roman" size="2" style="font-size:10.0pt;">/s/ W. 
    JAMES FARRELL</font></p> 
</td> 
</tr> 
<tr style="page-break-inside:avoid;"> 
<td style="border:none;padding:0pt .7pt 0pt 0pt;width:210.0pt;" valign="top" width="280"> 
<p style="margin:0pt 0pt .0001pt;"><font face="Times New Roman" size="2" style="font-size:10.0pt;">Thomas C. Freyman<br/> 
    Executive Vice President, Finance<br/> 
    and Chief Financial Officer<br/> 
    (principal financial officer)</font></p> 
</td> 
<td style="padding:0pt .7pt 0pt 0pt;width:30.0pt;" valign="top" width="40"> 
<p style="margin:0pt 0pt .0001pt;"><font face="Times New Roman" size="2" style="font-size:1.0pt;"> </font></p> 
</td> 
<td style="border:none;padding:0pt .7pt 0pt 0pt;width:215.7pt;" valign="top" width="288"> 
<p style="margin:0pt 0pt .0001pt;"><font face="Times New Roman" size="2" style="font-size:10.0pt;">W. James Farrell<br/> 
    Director of Abbott Laboratories</font></p> 
</td> 
</tr> 
<tr style="page-break-inside:avoid;"> 
<td style="border:none;border-bottom:solid windowtext 1.0pt;padding:0pt .7pt 0pt 0pt;width:210.0pt;" valign="top" width="280"> 
<p style="margin:24.0pt 0pt .0001pt;"><font face="Times New Roman" size="2" style="font-size:10.0pt;">/s/ GREG W. LINDER</font></p> 
</td> 
<td style="padding:0pt .7pt 0pt 0pt;width:30.0pt;" valign="top" width="40"> 
<p style="margin:0pt 0pt .0001pt;"><font face="Times New Roman" size="2" style="font-size:1.0pt;"> </font></p> 
</td> 
<td style="border:none;border-bottom:solid windowtext 1.0pt;padding:0pt .7pt 0pt 0pt;width:215.7pt;" valign="bottom" width="288"> 
<p style="margin:0pt 0pt .0001pt;"><font face="Times New Roman" size="2" style="font-size:10.0pt;">/s/ H. 
    LAURANCE FULLER</font></p> 
</td> 
</tr> 
<tr style="page-break-inside:avoid;"> 
<td style="border:none;padding:0pt .7pt 0pt 0pt;width:210.0pt;" valign="top" width="280"> 
<p style="margin:0pt 0pt .0001pt;"><font face="Times New Roman" size="2" style="font-size:10.0pt;">Greg W. Linder<br/> 
    Vice President and Controller<br/> 
    (principal accounting officer)</font></p> 
</td> 
<td style="padding:0pt .7pt 0pt 0pt;width:30.0pt;" valign="top" width="40"> 
<p style="margin:0pt 0pt .0001pt;"><font face="Times New Roman" size="2" style="font-size:1.0pt;"> </font></p> 
</td> 
<td style="border:none;padding:0pt .7pt 0pt 0pt;width:215.7pt;" valign="top" width="288"> 
<p style="margin:0pt 0pt .0001pt;"><font face="Times New Roman" size="2" style="font-size:10.0pt;">H. Laurance Fuller<br/> 
    Director of Abbott Laboratories</font></p> 
</td> 
</tr> 
</table> 
+0

Я реализовал свое затруднительное, но когда я делаю следующий шаг, я получаю TypeError: «NoneType 'объект не является итерируемым. Это означает, что находка не сработала, так что все еще что-то не так. Если вы хотите использовать ссылку, которую я использую, вот ссылка: https://www.sec.gov/Archives/edgar/data/1800/000110465907013496/a07-1583_110k.htm – Retroflux

+1

@Retroflux, см. Edit –

+0

Правильно, поэтому регулярное выражение будет иметь дело с новостями, а unescape - с символами юникода? – Retroflux

Смежные вопросы