有许多HTML页面按这样的组顺序构成:
<p>
<b> Keywords/Category:</b>
"keyword_a, keyword_b"
</p>
这些页面的地址类似https://some.page.org/year/0001,https://some.page.org/year/0002等。
如何从每个此类页面中分别提取关键字?我尝试使用BeautifulSoup,但未成功。我只编写了打印组标题(在<b>
和</b>
之间)的程序。
from bs4 import BeautifulSoup
from urllib2 import urlopen
import re
html_doc = urlopen('https://some.page.org/2018/1234').read()
soup = BeautifulSoup(html_doc)
for link in soup.find_all('a'):
print 'https://some.page.org'+link.get('href')
for node in soup.findAll('b'):
print ''.join(node.findAll(text=True))
答案 0 :(得分:2)
我无法在不知道实际源代码格式的情况下对此进行测试,但是看来您想要<p>
标签text
有价值:
for node in soup.findAll('p'):
print(node.text)
# or: keywords = node.text.split(', ')
# print(keywords)
答案 1 :(得分:1)
您需要使用 /
然后您可以选择所需的块
例如,如果网址是 https://some.page.org/year/0001 ,则我使用分割功能以 / 符号
分割网址它将转换为数组,然后选择所需的内容,然后再次使用''.join()
方法将其转换为字符串,您可以在此link中了解split方法
答案 2 :(得分:1)
有多种方法可以从此类HTML结构中解析所需的类别和关键字,但这是“ BeautifulSoup”方法之一:
b
结尾的:
元素.next_sibling
转到下一个包含关键字的文本节点工作示例:
from bs4 import BeautifulSoup
data = """
<div>
<p>
<b> Category 1:</b>
"keyword_a, keyword_b"
</p>
<p>
<b> Category 2:</b>
"keyword_c, keyword_d"
</p>
</div>
"""
soup = BeautifulSoup(data, "html.parser")
for category in soup('b', text=lambda text: text and text.endswith(":")):
keywords = category.next_sibling.strip('" \n').split(", ")
print(category.get_text(strip=True), keywords)
打印:
Category 1: ['keyword_a', 'keyword_b']
Category 2: ['keyword_c', 'keyword_d']
答案 3 :(得分:0)
假设每个块
<p>
<b> Keywords/Category:</b>
"keyword_a, keyword_b"
</p>
您要为每个keyword_a
提取keyword_b
和Keywords/Category
。这样的例子是:
<p>
<b>Mammals</b>
"elephant, rhino"
</p>
<p>
<b>Birds</b>
"hummingbird, ostrich"
</p>
拥有HTML代码后,您可以执行以下操作:
from bs4 import BeautifulSoup
html = '''<p>
<b>Mammals</b>
"elephant, rhino"
</p>
<p>
<b>Birds</b>
"hummingbird, ostrich"
</p>'''
soup = BeautifulSoup(html, 'html.parser')
p_elements = soup.find_all('p')
for p_element in p_elements:
b_element = soup.find_all('b')[0]
b_element.extract()
category = b_element.text.strip()
keywords = p_element.text.strip()
keyword_a, keyword_b = keywords[1:-1].split(', ')
print('Category:', category)
print('Keyword A:', keyword_a)
print('Keyword B:', keyword_b)
哪些印刷品:
Category: Mammals
Keyword A: elephant
Keyword B: rhino
Category: Birds
Keyword A: hummingbird
Keyword B: ostrich