如何从HTML页面中提取文本?

5

For example the web page is the link:

https://www.architecture.com/FindAnArchitect/FAAPractices.aspx?display=50

我需要公司的名称、地址和网站。我尝试了以下方法将html转换为文本:
import nltk   
from urllib import urlopen

url = "https://www.architecture.com/FindAnArchitect/FAAPractices.aspx display=50"    
html = urlopen(url).read()    
raw = nltk.clean_html(html)  
print(raw)

但它返回了错误:
ImportError: cannot import name 'urlopen

2
你正在使用Python 3的**urllib**,它与Python 2的**urllib**不同。 - Peter Wood
1
我非常确定一旦你让它工作起来,你会感到失望:clean_html 没有被实现。请参见这个问题 - Peter Wood
1个回答

17

Peter Wood已回答了您的问题(链接)。

import urllib.request

uf = urllib.request.urlopen(url)
html = uf.read()

如果您想提取数据(例如公司名称、地址和网站),则需要获取HTML源代码并使用HTML解析器进行解析。

建议使用requests获取HTML源代码,然后使用BeautifulSoup解析生成的HTML并提取所需文本。

以下是一个小片段,可以帮助您入门。

import requests
from bs4 import BeautifulSoup

link = "https://www.architecture.com/FindAnArchitect/FAAPractices.aspx?display=50"

html = requests.get(link).text

"""If you do not want to use requests then you can use the following code below 
   with urllib (the snippet above). It should not cause any issue."""
soup = BeautifulSoup(html, "lxml")
res = soup.findAll("article", {"class": "listingItem"})
for r in res:
    print("Company Name: " + r.find('a').text)
    print("Address: " + r.find("div", {'class': 'address'}).text)
    print("Website: " + r.find_all("div", {'class': 'pageMeta-item'})[3].text)

不错,但是如果我打开一个随机的网站,我想提取重要的文本,比如菜单或页面末尾,我只想直接获取主题内容,该怎么办呢? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接