import numpy as np
import json
import re
from urllib.request import urlopen
from bs4 import BeautifulSoup
url = "http://www.npr.org/sections/thetwo-way/2017/03/06/518805720/turkey-germany-relations-at-new-low-after-erdogan-makes-nazi-comparison"
html = urlopen(url)
bsObj = BeautifulSoup(html, 'lxml')
def keyInfo(div):
print(div.find("h1").get_text())
print(div.find("span", {"class":"date"}).get_text())
print(div.find("a", {"rel":"author"}).get_text().strip())
print(div.findAll("p")) # Problem here
keyInfo(bsObj)
问题是def keyInfo的最后一行,它打印了很多东西,标签,标题,我只想要主要内容的文本,我怎么能实现呢?
答案 0 :(得分:1)
此代码可以更好地提取特定网站的内容。
def keyInfo(div):
print(div.find("h1").get_text())
article = div.find("article")
divText = article.find("div", id="storytext")
[a.extract() for a in divText.findAll("aside")]
[d.extract() for d in divText.findAll("div")]
print(divText.get_text())
在使用Chrome开发工具查看内容结构后,我发现故事内容位于article > div[id=storytext]
,但div[id=storytext]
还包含一些旁边和div与非文章内容。删除那些留下文章的段落。
如果您正在寻找更通用的东西,您可能需要考虑像Boilerpipe这样的东西。这是Boilerpipe的Python包装器:https://github.com/misja/python-boilerpipe