我正在尝试使用python和美丽的汤来提取以下标签的内容部分:
<meta property="og:title" content="Super Fun Event 1" />
<meta property="og:url" content="http://superfunevents.com/events/super-fun-event-1/" />
我正在让 BeautifulSoup 很好地加载页面并找到其他东西(这也从隐藏在源中的 id 标签中获取文章 id),但我不知道搜索 html 并找到这些位的正确方法,我尝试了 find 和 findAll 的变体,但无济于事。该代码目前迭代了一个 url 列表......
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#importing the libraries
from urllib import urlopen
from bs4 import BeautifulSoup
def get_data(page_no):
webpage = urlopen('http://superfunevents.com/?p=' + str(i)).read()
soup = BeautifulSoup(webpage, "lxml")
for tag in soup.find_all("article") :
id = tag.get('id')
print id
# the hard part that doesn't work - I know this example is well off the mark!
title = soup.find("og:title", "content")
print (title.get_text())
url = soup.find("og:url", "content")
print (url.get_text())
# end of problem
for i in range (1,100):
get_data(i)
如果有人可以帮我整理一下以找到 og:title 和 og:content 那就太棒了!
提供 meta
标记名称作为 find()
的第一个参数。然后,使用关键字参数检查特定属性:
title = soup.find("meta", property="og:title")
url = soup.find("meta", property="og:url")
print(title["content"] if title else "No meta title given")
print(url["content"] if url else "No meta url given")
如果您知道 title 和 url 元属性将始终存在,则此处的 if
/else
检查将是可选的。
尝试这个 :
soup = BeautifulSoup(webpage)
for tag in soup.find_all("meta"):
if tag.get("property", None) == "og:title":
print tag.get("content", None)
elif tag.get("property", None) == "og:url":
print tag.get("content", None)
我喜欢解决这个问题的方法如下:(使用属性列表查找时更整洁......)
title = soup.find("meta", {"property":"og:title"})
url = soup.find("meta", {"property":"og:url"})
# Using same method as above answer
title = title["content"] if title else None
url = url["content"] if url else None
您可以使用 gazpacho 获取元标记内的内容:
from gazpacho import Soup
html = """\
<meta property="og:title" content="Super Fun Event 1" />
<meta property="og:url" content="http://superfunevents.com/events/super-fun-event-1/" />
"""
soup = Soup(html)
soup.find("meta", {"property": "og:title"}).attrs['content']
这将输出:
'Super Fun Event 1'
Jinesh Narayanan 的这段代码:https://gist.github.com/jineshpaloor/6478011 对此讨论有效。
from bs4 import BeautifulSoup
import requests
def main():
r = requests.get('http://www.sourcebits.com/')
soup = BeautifulSoup(r.content, features="lxml")
title = soup.title.string
print ('TITLE IS :', title)
meta = soup.find_all('meta')
for tag in meta:
if 'name' in tag.attrs.keys() and tag.attrs['name'].strip().lower() in ['description', 'keywords']:
# print ('NAME :',tag.attrs['name'].lower())
print ('CONTENT :',tag.attrs['content'])
if __name__ == '__main__':
main()
soup.find("meta", property="og:title", content=True)
加强content
属性的存在。谢谢。