有没有办法提取
阿尔伯特·爱因斯坦(1938年3月14日至1955年4月18日),他是德国出生的理论物理学家,他发展了广义相对论,实现了物理学的革命。 ...............超过150个非科学作品。 [6] [8]他伟大的智慧和独创性使“爱因斯坦”这个词成为天才的代名词。 [9]
(主段落的整个输出,如果代码运行,则可见)
自动输出以下代码?即使它是从不同的维基百科页面输出:
import urllib2
import re, sys
from HTMLParser import HTMLParser
class MLStripper(HTMLParser):
def __init__(self):
self.reset()
self.fed = []
def handle_data(self, d):
self.fed.append(d)
def get_data(self):
return ''.join(self.fed)
def stripHTMLTags(html):
html = re.sub(r'<{1}br{1}>', '\n', html)
s = MLStripper()
s.feed(html)
text = s.get_data()
if "External links" in text:
text, sep, tail = text.partition('External links')
if "External Links" in text:
text, sep, tail = text.partition('External Links')
text = text = text.replace("See also","\n\n See Also - \n")
text = text.replace("*","- ")
text = text.replace(".", ". ")
text = text.replace(" "," ")
text = text.replace(""" /
/ ""","")
return text
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
infile = opener.open('http://en.wikipedia.org/w/index.php?title=Albert_Einstein&printable=yes')
page = infile.read()
print stripHTMLTags(page)
请原谅我糟糕的格式,代码(以及可能的缩进),我现在正在使用3“显示器,并且没有机会查看我自己的代码:P。
还要感谢那些帖子帮助我完成这项工作的人们。)
答案 0 :(得分:3)
我强烈建议不要对任何网站进行html抓取。
这很痛苦,很容易破坏,很多网站所有者都不喜欢它。
使用此(python-wikitools)与Wikipedia API(从长远来看,这是您的最佳选择)进行交互。
答案 1 :(得分:1)
以下API请求返回纯文本页面提取: https://en.wikipedia.org/w/api.php?action=query&prop=extracts&titles=Albert%20Einstein&explaintext
答案 2 :(得分:-1)
我在这里留下答案,因为它直接是OP所要求的。正确的方法是按照the answer by @ChristophD中的建议使用python-wikitools
。
我稍微修改了您问题中的代码以使用BeautifulSoup。存在其他选择。您可能还想尝试lxml。
import urllib2
import re, sys
from HTMLParser import HTMLParser
# EDIT 1: import the packag
from BeautifulSoup import BeautifulSoup
class MLStripper(HTMLParser):
def __init__(self):
self.reset()
self.fed = []
def handle_data(self, d):
self.fed.append(d)
def get_data(self):
return ''.join(self.fed)
def stripHTMLTags(html):
html = re.sub(r'<{1}br{1}>', '\n', html)
s = MLStripper()
s.feed(html)
text = s.get_data()
if "External links" in text:
text, sep, tail = text.partition('External links')
if "External Links" in text:
text, sep, tail = text.partition('External Links')
text = text = text.replace("See also","\n\n See Also - \n")
text = text.replace("*","- ")
text = text.replace(".", ". ")
text = text.replace(" "," ")
text = text.replace(""" /
/ ""","")
return text
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
infile = opener.open('http://en.wikipedia.org/w/index.php?title=Albert_Einstein&printable=yes')
page = infile.read()
# EDIT 2: convert the page and extract text from the first <p> tag
soup = BeautifulSoup(page)
para = soup.findAll("p", limit=1)[0].text
print stripHTMLTags(para)