python - Python Bs4 不能在双跨该死的文本中包含纯文本
问题描述
嘿伙计们,所以我正在尝试抓取 Indeed 网站,到目前为止,除了薪水之外,一切都运行良好(当然是大声笑)。
所以我远不是请求、requests_html 和 bs4 方面的专家,所以在到处寻找一个小时后,我找不到我的特定问题的答案,所以我在这里......
我已经缩短了代码以使事情变得更容易(我会刮掉更多的东西)但是我已经让一个带有 .text 的跨度作为示例,它工作正常但只有一个跨度,而不是像薪水那样的跨度:
<div class="salarySnippet salarySnippetDemphasizeholisticSalary">
<span class="salary no-wrap">
<span class="salaryText">
1 900 € - 2 100 € par mois</span>
</span>
</div>
我是法国人,所以如果你想尝试自己去巴黎,Indeed 是法语版本,或者在输入中:
from bs4 import BeautifulSoup
import requests as req
print("_____Indeed Job Scaper_____")
city = str(input("Enter your city name here: "))
url = ("https://www.indeed.fr/emplois?l=" + city)
u_req = req.get(url)
soup = BeautifulSoup(u_req.content, 'html.parser')
job_elems = soup.find_all('div' , class_='jobsearch-SerpJobCard')
for job_elem in job_elems:
compagny_name = job_elem.find('span' , class_="company")
salary = job_elem.find("span", {"class": "salaryText"})
print(compagny_name.text)
print(salary.text)
如果我不要求 print .text 关于薪水,我将得到:
<span class="salaryText">
1 800 € - 4 000 € par mois</span>
解决方案
似乎并非每张卡都存在此salaryText
跨度。因此,在您的循环中,您需要在访问它的内部文本之前检查跨度是否存在。
这是您的代码的更新版本:
from bs4 import BeautifulSoup
import requests as req
print("_____Indeed Job Scaper_____")
city = str(input("Enter your city name here: "))
url = ("https://www.indeed.fr/emplois?l=" + city)
u_req = req.get(url)
soup = BeautifulSoup(u_req.content, 'html.parser')
job_elems = soup.find_all('div' , class_='jobsearch-SerpJobCard')
for job_elem in job_elems:
compagny_name = job_elem.find('span' , class_="company")
salary = job_elem.find("span", {"class": "salaryText"})
print(compagny_name.text)
# check if salary is not none, before accessing it's text property.
if salary:
print(salary.text)
你能告诉我它是否有效吗?
推荐阅读
- python - 想使用 python 将我存在于 csv 中的数据相乘
- typescript - Angular 10 和 ES2020 中的可选链接模块解析失败
- javascript - D3 Web 地图:将光栅 PNG 与 TopoJSON 对齐
- html - 使用一个元素在它后面的元素中创建一个“窗口”
- php - WooCommerce 再次订购和用于价格计算的自定义商品数据
- node.js - PDFToolKit 正在发送奇怪的数据
- udp - 如何检测 UDP 流完成?
- c# - 如何为钩子使用参数化方法 - SpecFlow
- scala - 映射函数中的数组操作:Spark 1.6
- delphi - Delphi FMX TListBox 对于大型列表很慢