簡體   English   中英

使用 Python 將單詞列表拆分為多個網頁

[英]Scraping a list of words split into multiple webpages with Python

我想制作一個程序,可以計算哪些單詞或哪些單詞會讓玩家在拼字游戲中獲得最高分。 但是,為此,我需要一個被接受的單詞列表。 我找到了英語的 sowpods 列表,但我想讓這個程序也能用法語工作,這是我的母語。

我發現這個網站提供了這樣一個列表,但它被分成 918 個網頁,這會使復制粘貼所有內容變得相當長......

我曾嘗試使用 Python 庫(我不記得是哪一個)來進行 web 抓取以獲取單詞,但由於我真的不知道如何使用它,它似乎很難。 我得到了網站的全部文本,然后我可以逐個字符到 go 到 select 只是單詞列表,但是由於每個頁面上的字符數會有所不同,所以這不能很容易地自動化。

我考慮過使用正則表達式來 select 僅大寫字母的單詞(因為它們在網站上)但是如果還有其他大寫字母的單詞或字符,例如網站上的標題,那么我的單詞列表將不正確.

我怎樣才能得到所有的單詞而不必更改我的每一頁的代碼?

看起來該網站在頁面之間具有一致的結構。 這些單詞存儲在一個span標簽中,其中一個名為mot的 class 。 您提到的庫可能是 BeautifulSoup,這使得自動化非常容易。 您只需要請求每個頁面,select 標簽mot並提取 innerHtml。 用空格字符 ( " " ) 拆分內容將為您提供一個數組,其中包含您需要從該頁面中獲取的所有單詞。

讓我知道這是否對您有幫助,以及您在編碼部分是否需要更多幫助。

編輯:我在下面包含了一些代碼。

import requests
from bs4 import BeautifulSoup

def getWordsFromPage(pageNumber):
    if pageNumber == 1:
        # page 1
        url = 'https://www.listesdemots.net/touslesmots.htm'
    else:
        # from page 2 to 918
        url = 'https://www.listesdemots.net/touslesmotspage{pageNumber}.htm'
        url = url.format(pageNumber=pageNumber)

    response = requests.get(url)
    html_soup = BeautifulSoup(response.text, 'html.parser')
    span = html_soup.find("span", "mot")

    words = span.text.split(" ")

    return words

print("Page 1")
print(getWordsFromPage(1))
print("Page 24")
print(getWordsFromPage(24))
print("Page 918")
print(getWordsFromPage(918))

所有頁面都是相同的,並且單詞在 span 標簽中。 使用requestsbeautifulsoup很容易:

import time
import requests
from bs4 import BeautifulSoup

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 YaBrowser/19.10.3.281 Yowser/2.5 Safari/537.36'
}

pages = ['https://www.listesdemots.net/touslesmots.htm']  # adds the first page
for p in range(2, 919):  # adding the remaining pages
    pages.append('https://www.listesdemots.net/touslesmotspage%s.htm' % p)

for p in pages:
    data = None
    try:
        #  download each page
        r = requests.get(p, headers=headers)
        data = r.text
    except:
        #  we dont handle errors
        print("Failed to download page: %s" % p)

    if data:
        #  instanciate the html parser and search for span.mot
        soup = BeautifulSoup(data, 'html.parser')        
        wordTag = soup.find("span", {"class": "mot"})

        words = 0
        if wordTag:
            #  if there is a span.mot tag found, split its contents by one blanc
            words = wordTag.contents[0].split(' ')

        print ('%s got %s words' % (p, len(words)))
    time.sleep(5)

Output:

https://www.listesdemots.net/touslesmots.htm got 468 words
https://www.listesdemots.net/touslesmotspage2.htm got 496 words
https://www.listesdemots.net/touslesmotspage3.htm got 484 words
https://www.listesdemots.net/touslesmotspage4.htm got 468 words
....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM