我需要从HTML文件中提取数据。有问题的文件很可能是自动生成的。我已将其中一个文件的代码上传到Pastebin:http://pastebin.com/9Nj2Edfv。这是指向实际页面的链接:http://eur-lex.europa.eu/Notice.do?checktexts=checkbox&val=60504%3Acs&pos=1&page=1&lang=en&pgs=10&nbl=1&list=60504%3Acs%2C&hwords=&action=GO&visu=%23texte
我需要提取的数据可以在不同的标题下找到。
这是我到目前为止所做的:
from BeautifulSoup import BeautifulSoup
ecj_data = open("data\ecj_1.html",'r').read()
soup = BeautifulSoup(ecj_data)
celex = soup.find('h1')
auth_lang = soup('ul', limit=14)[13].li
procedure = soup('ul', limit=20)[17].li
print "Celex number:", celex.renderContents(),
print "Authentic language:", auth_lang
print "Type of procedure:", procedure
我将所有数据存储在本地,这就是打开文件ecj_1.html的原因。
Celex编号和Authentic语言有点好用。
celex返回
"Celex number:
61977J0059"
auth_lang返回"Authentic language: <li>French</li>"
我只需要h1标签的内容(不是最后的中断)。
[另外,我需要auth_lang只返回“French”,而不是<li>
- 标签。
这不再是问题了。我意识到我可以在“auth_lang”的末尾添加“.text”。
另一方面,程序返回:
Type of procedure: <li>
<strong>Type of procedure:</strong>
<br />
Reference for a preliminary ruling
</li>
这是非常错误的,因为我只需要它返回“参考初步裁决”。
有什么方法可以实现这个目标吗?
第二次修改:
我将celex = soup.find('h1')
替换为celex = soup('h1', limit=2)[0]
并将.text
添加到印刷品中。
答案 0 :(得分:4)
每个找到的序列的内容都是列表,前两个是长度1.但是procedure
长度是5个元素,而你之后的条目(在这种情况下)是第4个。我也用splitlines()来删除换行符。
print "Celex number:", celex.contents[0].splitlines()[1]
print "Authentic language:", auth_lang.contents[0].splitlines()[0]
print "Type of procedure:", procedure.contents[4].splitlines()[1]
输出:
Celex number: 61977J0059
Authentic language: French
Type of procedure: Reference for a preliminary ruling