美丽的精灵和Python

2024-03-28 15:18:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个非常新的使用beautifulsoup因此我的问题可能看起来像我误解了什么,但这里去。你知道吗

我现在正在努力做一本同义词词典,因为我现在能找到的那些并不令人惊奇。在这方面,我是建立在别人的工作,谁做PyDictionary的人,因此我从http://www.thesaurus.com/拉同义词

在本例中,我试图仅从视图源中提取名词同义词:http://www.thesaurus.com/browse/animal?s=t

我发现这篇文章指出下一个关联块下的同义词是名词:

            <div class="synonym-description">
                <em class="txt">noun</em>
                <strong class="ttl">animate being; mammal</strong>
            </div>
            <div class="relevancy-block">
                <div class="relevancy-list">

我的下一个问题本质上是如何指定我只想在类块“relevancy list”中直接在^{cl1}$

后面查找行

 <li><a href="http://www.thesaurus.com/browse/pet" class="common-word" data-id="1" data-category="{&quot;name&quot;: &quot;relevant-3&quot;, &quot;color&quot;: &quot;#fcbb45&quot;}" data-complexity="1" data-length="1"><span class="text">pet</span><span class="star inactive">star</span></a></li>

拉出^{cl2}下的文本$

目前,我正在通过以下方式将其加载到对象中:

BeautifulSoup(requests.get(url).text)

我真的不知道下一步该去哪里,我尝试过谷歌搜索,但没有真正的效果。你知道吗


Tags: divcomhttpdatawwwclassstrongspan
3条回答

可以使用find_all函数,其中第一个参数是类型('div','a'等),第二个参数可以按类过滤。你知道吗

soup.find_all('em', {'class':"txt"})

这样你就可以用类“txt”得到所有的“em”。你知道吗

soup.find_all('div', {'class':"relevancy-block"})

在这里,您将找到所有类名为“relevancy block”的“div”

import requests, bs4
url = "http://www.thesaurus.com/browse/animal?s=t"
r = requests.get(url)
soup = bs4.BeautifulSoup(r.text, 'lxml')
for txt in soup.find_all(class_="txt"):
    relevancy_list = txt.find_next(class_="relevancy-list")

多亏了我收到的两条评论,我找到了这样做的方法:

下面的代码首先查看过滤器,然后如果过滤器是一个名词或动词,如果它是一个名词,它会列出所有分类为常用词的名词

def _get_soup_object(url):
    return BeautifulSoup(requests.get(url).text)

term="animal" 

data = _get_soup_object("http://www.thesaurus.com/browse/{0}".format(term))

for selector_var in data.find_all(class_="filters"):

    word_type=selector_var.find_all(class_="txt")
    if word_type[0].text=="adj":
        print("This is an adjective, which we don't want")

    elif word_type[0].text=="noun":
        print("This is a noun, which we do want")

        word_list=selector_var.find_all(class_="common-word")
        for indv_word in word_list:
            print(indv_word.text[:-4])

相关问题 更多 >