【问题标题】:Scraping words from online dictionary : while/loop issue从在线词典中抓取单词:while/loop 问题
【发布时间】:2021-11-17 10:58:52
【问题描述】:

我在尝试从在线词典中抓取所有单词以便稍后获取其定义时遇到了问题。我正在使用 BeautifulSoup,我认为我的 while 和 for 循环存在问题。

正如您在下面的代码中看到的那样,我的 url 中有两个变量要抓取,一个用于字母表中的字母,第二个用于页数,以便从一个字母中获取所有单词。

def get_data():
    page = 1
    letters = ['A', 'B', 'C']
    all_words = []

    for letter in letters:
        while page != 100:
            url = f"https://dictionnaire.lerobert.com/explore/def/{letter}/{page}"
            soup = BeautifulSoup(requests.get(url=url).text, 'html.parser')
            data = soup.find(class_='l-l')
            for word in data.find_all('a'):
                all_words.append(word['href'])
            page = page + 1

    print(all_words)
    print(len(all_words))

使用此代码,它只考虑字母 A。所以我尝试将 while 放在 for 循环之前,我确实混合了 A、B 和 C 字,但只有几十个字,所以计数根本不匹配。

你们对此有什么想法吗?我肯定在 while 和 for 循环操作中遗漏了一些东西,但我不知道是什么(老实说,我对编码有点陌生)

非常感谢, 电视-

【问题讨论】:

  • 退出while循环时将页面重置为1

标签: python loops web-scraping beautifulsoup while-loop


【解决方案1】:

您没有将 page 重置为 1。

得到字母A的单词后,page的值将是100。在下一次迭代中,当字母为 B 时,page 仍为 100,因此不会执行 while 循环。

for letter in letters:
        page = 1   # Resetting the page to 1
        while page != 100:
            url = f"https://dictionnaire.lerobert.com/explore/def/{letter}/{page}"
            soup = BeautifulSoup(requests.get(url=url).text, 'html.parser')
            data = soup.find(class_='l-l')
            for word in data.find_all('a'):
                all_words.append(word['href'])
            page = page + 1

【讨论】:

    猜你喜欢
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 2018-07-24
    • 1970-01-01
    • 2021-10-09
    • 2022-12-09
    • 1970-01-01
    相关资源
    最近更新 更多