我正在尝试编写一个Python脚本来检索文章是否有作者。
我写了以下内容:
s = "https://www.nytimes.com/2017/08/18/us/politics/steve-bannon-trump-white-house.html?hp&action=click&pgtype=Homepage&clickSource=story-heading&module=a-lede-package-region®ion=top-news&WT.nav=top-news"
def checkForAuthor():
r = requests.get(s)
return "By" in r.text
print(checkForAuthor())
问题是,即使没有作者,函数checkForAuthor
也会返回true
,因为它会搜索整个HTML内容中的单词。
在没有搜索整个文档的情况下找到作者是否有更好的逻辑?比如在标题内搜索,所以我甚至不必搜索文章内容。我确实需要这样做,以便我在其中搜索的任何网站都会给我结果。不确定那里有什么东西。
答案 0 :(得分:1)
要解析html并查找所需的数据,您应该使用BeautifulSoup
库。
在您的网址的html中,有一个meta
标记与作者:
<meta content="By MAGGIE HABERMAN, MICHAEL D. SHEAR and GLENN THRUSH" name="byl"/>
因此,要检查是否有作者,您需要通过其名称(byl
)找到它:
import requests
from bs4 import BeautifulSoup
s = "https://www.nytimes.com/2017/08/18/us/politics/steve-bannon-trump-white-house.html?hp&action=click&pgtype=Homepage&clickSource=story-heading&module=a-lede-package-region®ion=top-news&WT.nav=top-news"
def checkForAuthor():
soup = BeautifulSoup(requests.get(s).content, 'html.parser')
meta = soup.find('meta', {'name': 'byl'})
return meta is not None
实际上,您还可以使用meta["content"]
答案 1 :(得分:0)
从网页抓取数据的一个关键部分是查看网页的HTML源代码以正确获取数据。在您提供的链接中,有以下行包含作者信息。
<meta name="author" content="Maggie Haberman, Michael D. Shear and Glenn Thrush" />
<meta name="byl" content="By MAGGIE HABERMAN, MICHAEL D. SHEAR and GLENN THRUSH" />
<meta property="article:author" content="https://www.nytimes.com/by/maggie-haberman" />
<meta property="article:author" content="https://www.nytimes.com/by/michael-d-shear" />
<meta property="article:author" content="https://www.nytimes.com/by/glenn-thrush" />
还有其他但这些应该有所帮助。要解析这些标记,您可以使用beautiful-soup。