如果在 Beautifulsoup4 中有更多具有相同标签名称和 class 名称的元素,但对于另一个元素,如何抓取元素?
How to scrape element if there is some more element with the same tag name and class name but for another for another thing in Beautifulsoup4?
我想抓取这份工作的薪水,但有许多与薪水无关的元素具有相同的标签名称和 class 名称,我如何用 beautifulsoup4 或我必须找到另一个像 selenium 这样的网络抓取库。而且我认为 xpath 也将相同。没有技能和描述的其他要素,我怎么能只拿到工资呢
html = '''
<div class="the-same-div">
<span class="header-span">Salary</span>
<span class="key-span">
<span class="css-8888">1000 Dollar</span>
</span>
</div>
<div class="the-same-div">
<span class="header-span">Skills</span>
<span class="key-span">
<span class="css-8888">Web scraping</span>
</span>
</div>
<div class="the-same-div">
<span class="header-span">Description</span>
<span class="key-span">
<span class="css-8888">This is a web scraping Job with good salary</span>
</span>
</div>'''
现在这是 python 抓取工资元素的代码
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "lxml")
salary = soup.find_all("span", {"class": "css-8888"})
现在我怎么能把这份工作的工资凑出来呢。谢谢。
因为 Selenium 被标记了,这就是我在 Selenium 中要做的事情:
//span[text() = 'Salary']/following-sibling::span/span
并使用 .text
方法从中获取文本
像这样:
print(driver.find_element_by_xpath("//span[text() = 'Salary']/following-sibling::span/span").text)
如果有不止一份工资使用find_elements
您可以获取包含 "Salary"
文本的标签,然后 .find_next()
获取带有薪水的顺序 <span>
标签:
html = '''
<div class="the-same-div">
<span class="header-span">Salary</span>
<span class="key-span">
<span class="css-8888">1000 Dollar</span>
</span>
</div>
<div class="the-same-div">
<span class="header-span">Skills</span>
<span class="key-span">
<span class="css-8888">Web scraping</span>
</span>
</div>
<div class="the-same-div">
<span class="header-span">Description</span>
<span class="key-span">
<span class="css-8888">This is a web scraping Job with good salary</span>
</span>
</div>'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "lxml")
span = soup.find_all("span", {"class": "header-span"}, text='Salary')
for each in span:
salary = each.find_next('span',{'class':'css-8888'})
print(salary.text)
输出:
1000 Dollar
我不确定 selenium 是否适合这样的任务,selenium 的主要目的有点不同。
要获得所有薪水,我会按照以下方式进行:
from bs4 import BeautifulSoup as bs
html_file = open("test.html", "r")
soup = bs(html_file.read())
same_div_list = soup.find_all("div", {"class": "the-same-div"})
jobs_salary_list = []
for div in same_div_list:
if div.find("span", {"class": "header-span"}).text == "Salary":
jobs_salary_list.append(div.find("span", {"class": "css-8888"}).text)
print(jobs_salary_list)
所以基本上 bs4 使您能够在本地(在其他对象内)进行搜索,因此首先您获得所有“相同的-div”div,遍历它们并查看“header-span”值,如果它等于“Salary”,那么您将采用“css-8888”span 的值。
我想抓取这份工作的薪水,但有许多与薪水无关的元素具有相同的标签名称和 class 名称,我如何用 beautifulsoup4 或我必须找到另一个像 selenium 这样的网络抓取库。而且我认为 xpath 也将相同。没有技能和描述的其他要素,我怎么能只拿到工资呢
html = '''
<div class="the-same-div">
<span class="header-span">Salary</span>
<span class="key-span">
<span class="css-8888">1000 Dollar</span>
</span>
</div>
<div class="the-same-div">
<span class="header-span">Skills</span>
<span class="key-span">
<span class="css-8888">Web scraping</span>
</span>
</div>
<div class="the-same-div">
<span class="header-span">Description</span>
<span class="key-span">
<span class="css-8888">This is a web scraping Job with good salary</span>
</span>
</div>'''
现在这是 python 抓取工资元素的代码
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "lxml")
salary = soup.find_all("span", {"class": "css-8888"})
现在我怎么能把这份工作的工资凑出来呢。谢谢。
因为 Selenium 被标记了,这就是我在 Selenium 中要做的事情:
//span[text() = 'Salary']/following-sibling::span/span
并使用 .text
方法从中获取文本
像这样:
print(driver.find_element_by_xpath("//span[text() = 'Salary']/following-sibling::span/span").text)
如果有不止一份工资使用find_elements
您可以获取包含 "Salary"
文本的标签,然后 .find_next()
获取带有薪水的顺序 <span>
标签:
html = '''
<div class="the-same-div">
<span class="header-span">Salary</span>
<span class="key-span">
<span class="css-8888">1000 Dollar</span>
</span>
</div>
<div class="the-same-div">
<span class="header-span">Skills</span>
<span class="key-span">
<span class="css-8888">Web scraping</span>
</span>
</div>
<div class="the-same-div">
<span class="header-span">Description</span>
<span class="key-span">
<span class="css-8888">This is a web scraping Job with good salary</span>
</span>
</div>'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "lxml")
span = soup.find_all("span", {"class": "header-span"}, text='Salary')
for each in span:
salary = each.find_next('span',{'class':'css-8888'})
print(salary.text)
输出:
1000 Dollar
我不确定 selenium 是否适合这样的任务,selenium 的主要目的有点不同。 要获得所有薪水,我会按照以下方式进行:
from bs4 import BeautifulSoup as bs
html_file = open("test.html", "r")
soup = bs(html_file.read())
same_div_list = soup.find_all("div", {"class": "the-same-div"})
jobs_salary_list = []
for div in same_div_list:
if div.find("span", {"class": "header-span"}).text == "Salary":
jobs_salary_list.append(div.find("span", {"class": "css-8888"}).text)
print(jobs_salary_list)
所以基本上 bs4 使您能够在本地(在其他对象内)进行搜索,因此首先您获得所有“相同的-div”div,遍历它们并查看“header-span”值,如果它等于“Salary”,那么您将采用“css-8888”span 的值。