BeautifulSoup для сканирования таблиц с идентификатором в Python и без него - PullRequest
1 голос
/ 04 августа 2020

Я пытаюсь сканировать веб-сайты, и на всех них есть таблицы. Однако первый URL-адрес имеет идентификатор таблицы с именем .table-translations, а другой не имеет идентификатора, поэтому он не сканируется.

Но если я его не включу, он не будет сканировать .

Как использовать BeautifulSoup для сканирования данных с идентификатором таблицы и без него?

ниже мой код

import requests
from bs4 import BeautifulSoup


urls = ['http://www.mongols.eu/mongolian-language/mongolian-tale-six-silver-stars', 'http://www.mongols.eu/mongolian-language/mongolian-tale-yanzin-jaal']

for url in urls:
        print(url)
        out_fileName = url.rsplit('/', 1)[-1]
        out_mn = out_fileName + "_mn.txt"
        out_en = out_fileName + "_en.txt"

        soup = BeautifulSoup(requests.get(url).content, 'html.parser')

        all_data = []
        for row in soup.select('.table-translations tr')[1:]:
                mongolian, english = map(lambda t: t.get_text(strip=True), row.select('td')[1:])
                all_data.append((mongolian, english))

        for row in all_data:
                with open(out_mn, "a") as text_file:
                        text_file.write(row[0] + "\n")
                with open(out_en, "a") as text_file:
                        text_file.write(row[1] + "\n")

1 Ответ

0 голосов
/ 04 августа 2020

Этот скрипт получит все переводы этих двух URL. Но если есть другие страницы с другой структурой, необходимо настроить:

import requests
from bs4 import BeautifulSoup


urls = ['http://www.mongols.eu/mongolian-language/mongolian-tale-six-silver-stars', 'http://www.mongols.eu/mongolian-language/mongolian-tale-yanzin-jaal']

for url in urls:
    print(url)

    soup = BeautifulSoup(requests.get(url).content, 'html.parser')

    all_data = []
    for row in soup.select('tr')[1:]:
        tds = [*map(lambda t: t.get_text(strip=True), row.select('td'))]
        if len(tds) == 3:
            mongolian, english = map(lambda t: t.get_text(strip=True), row.select('td')[1:])
        else:
            mongolian, english = map(lambda t: t.get_text(strip=True), row.select('td'))

        print(mongolian)
        print(english)
        print('-' * 80)
        all_data.append((mongolian, english))

Печать:

http://www.mongols.eu/mongolian-language/mongolian-tale-six-silver-stars
Зургаан мөнгөн мичид
Six silver stars
--------------------------------------------------------------------------------
Эрт урьд цагт зургаан өнчин хүүхэд товцог толгой дээр наадан суудаг юм санжээ.
Long ago, there were six orphan brothers playing on the top of a hill.
--------------------------------------------------------------------------------

... and so on.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...