【问题标题】:Web scraping with Beautiful Soup Python使用 Beautiful Soup Python 进行网页抓取
【发布时间】:2022-01-31 15:27:37
【问题描述】:
我目前正在尝试从网站上抓取产品名称,但是,文本包含在我以前从未见过的标签中,因此不知道如何获取文本。
<h1 class="protect" data-category="Jackets" data-ino="SS18J42" data-
rd="02/22/2018" data-rw="1SS18" itemprop="name">Gradient Puffy
Jacket</h1>
我正在尝试使用 python 2.7 从我的程序中使用漂亮的汤 4 访问名称“渐变蓬松夹克”。我将不胜感激任何见解,因为这已经困扰了我好几天。
【问题讨论】:
标签:
python
html
beautifulsoup
【解决方案1】:
你可以使用BeautifulSoup:
from bs4 import BeautifulSoup as soup
s = """
<h1 class="protect" data-category="Jackets" data-ino="SS18J42" data-
rd="02/22/2018" data-rw="1SS18" itemprop="name">Gradient Puffy Jacket</h1>
"""
new_s = soup(s, 'lxml').find('h1', {'itemprop':'name'}).text
输出:
u'Gradient Puffy Jacket'
【解决方案2】:
添加到 Ajax1234 的答案。如果您通过其他 html 属性进行搜索:
from bs4 import BeautifulSoup
s = """
<h1 class="protect" data-category="Jackets" data-ino="SS18J42" data-
rd="02/22/2018" data-rw="1SS18" itemprop="name">Gradient Puffy Jacket</h1>
"""
soup = BeautifulSoup(s, 'html.parser')
print(soup.find('h1', {'class': 'protect'}).text)
print(soup.find('h1', {'data-category': 'Jackets'}).text)
print(soup.find('h1', {'data-ino': 'SS18J42'}).text)
等等……
【解决方案3】:
BeautifulSoup 允许您使用属性访问元素,因此您可以使用以下方法:
from bs4 import BeautifulSoup
html = """<h1 class="protect" data-category="Jackets" data-ino="SS18J42" data-
rd="02/22/2018" data-rw="1SS18" itemprop="name">Gradient Puffy
Jacket</h1>"""
soup = BeautifulSoup(html, "html.parser")
print soup.h1.text
【解决方案4】:
借助find in beautifulsoup
soup = BeautifulSoup(html, "html.parser")
print soup.find('h1',{'class':'protect'}).text
【解决方案5】:
我们可以使用以下两种方法轻松找到所需的数据。
更多 ino 请阅读documentations
第一种方法
from bs4 import BeautifulSoup as soup
html = """
<div itemscope> <p itemprop="a">1</p>
"""
src = soup(html, 'lxml').find('p', {'itemprop':'a'}).text
print(src)
输出 - 1
第二种方法
from bs4 import BeautifulSoup
s = """
<a class="doctor-name" itemprop="name" href="/doctors/gastroenterologists /required-code-1689679557">Required-code-or-output</a>
"""
soup = BeautifulSoup(s, 'html.parser')
print(soup.find('a', {'class': 'doctor-name'}).text)
print(soup.find('a', {'itemprop': 'name'}).text)
输出 - 必需的代码或输出