首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用soup.find,soup.find_all

如何使用soup.find,soup.find_all
EN

Stack Overflow用户
提问于 2022-05-03 08:07:18
回答 2查看 113关注 0票数 0

这是我的代码和输出

从bs4导入BeautifulSoup导入请求

代码语言:javascript
复制
res = requests.get("https://www.jobberman.com/jobs")
soup = BeautifulSoup(res.text, "html.parser")
job = soup.find("div", class_ = "relative inline-flex flex-col w-full text-sm font-normal pt-2")
company_name = job.find('a[href*="jobs"]')
print(company_name)

输出为零

代码语言:javascript
复制
None

但是当我使用select方法时,我得到了想要的结果,但不能在上面使用.text。

代码语言:javascript
复制
import requests
from bs4 import BeautifulSoup

res = requests.get("https://www.jobberman.com/jobs")
soup = BeautifulSoup(res.text, "html.parser")
job = soup.find("div", class_ = "relative inline-flex flex-col w-full text-sm font-normal pt-2")
company_name = job.select('a[href*="jobs"]').text
print(company_name)

输出

代码语言:javascript
复制
AttributeError: ResultSet object has no attribute 'text'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?
EN

回答 2

Stack Overflow用户

发布于 2022-05-03 08:35:02

改变你的选择策略--因为这里的主要问题是,并不是所有的公司名称都有关联:

代码语言:javascript
复制
job.find('div',{'class':'search-result__job-meta'}).text.strip()

代码语言:javascript
复制
job.select_one('.search-result__job-meta').text.strip()

示例

还以结构化的方式存储您的信息,以便进行后处理:

代码语言:javascript
复制
import requests
from bs4 import BeautifulSoup

res = requests.get("https://www.jobberman.com/jobs")
soup = BeautifulSoup(res.text, "html.parser")
data = []
for job in soup.select('div:has(>.search-result__body)'):
    data.append({
        'job':job.h3.text,
        'company':job.select_one('.search-result__job-meta').text.strip()
    })
data

输出

代码语言:javascript
复制
[{'job': 'Restaurant Manager', 'company': 'Balkaan Employments service'},
 {'job': 'Executive Assistant', 'company': 'Nolla Fresh & Frozen ltd'},
 {'job': 'Portfolio Manager/Instructor 1', 'company': 'Fun Science World'},
 {'job': 'Microbiologist', 'company': "NEIMETH INT'L PHARMACEUTICALS PLC"},
 {'job': 'Data Entry Officer', 'company': 'Nkoyo Pharmaceuticals Ltd.'},
 {'job': 'Chemical Analyst', 'company': "NEIMETH INT'L PHARMACEUTICALS PLC"},
 {'job': 'Senior Front-End Engineer', 'company': 'Salvo Agency'},...]
票数 3
EN

Stack Overflow用户

发布于 2022-05-03 08:48:53

你的搜索策略的问题已经被先前发布的评论和答案所涵盖。我为您的问题提供了一个解决方案,包括使用regex库以及find_all()函数调用:

代码语言:javascript
复制
    import requests
    from bs4 import BeautifulSoup
    import re
    
    res = requests.get("https://www.jobberman.com/jobs")
    soup = BeautifulSoup(res.text, "html.parser")
    company_name = soup.find_all("a", href=re.compile("/jobs\?"), rel="nofollow")
    for i in range(len(company_name)):
        print(company_name[i].text)

输出:

代码语言:javascript
复制
GRATIAS DEI NIGERIA LIMITED

Balkaan Employments service

Fun Science World

NEIMETH INT'L PHARMACEUTICALS PLC

Nkoyo Pharmaceuticals Ltd.

...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72096441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档