Python3: Как получить заголовок eng из URL? - PullRequest
0 голосов
/ 14 марта 2019

я использую этот код

import urllib.request
fp = urllib.request.urlopen("https://english-thai-dictionary.com/dictionary/?sa=all")
mybytes = fp.read()
mystr = mybytes.decode("utf8")
fp.close()
print(mystr)
x = 'alt'
for item in mystr.split():
    if (x) in item:
        print(item.strip())

Я получил тайское слово из этого кода, но я не знал, как получить англоязычное слово. Спасибо

1 Ответ

0 голосов
/ 16 марта 2019

Если вы хотите получить слова из таблицы, вы должны использовать библиотеку синтаксического анализа, например BeautifulSoup4 . Вот пример, как вы можете разобрать это (я использую запросы для получения и beautifulsoup здесь для анализа данных):

Сначала используйте инструменты dev в вашем браузере, чтобы идентифицировать таблицу с контентом, который вы хотите проанализировать. Таблица с переводами имеет servicesT атрибут класса, который встречается только один раз во всем документе:

import requests
from bs4 import BeautifulSoup

url = 'https://english-thai-dictionary.com/dictionary/?sa=all;ftlang=then'

response = requests.get(url)

soup = BeautifulSoup(response.text, 'lxml')


# Get table with translations
table = soup.find('table', {'class':'servicesT'})

После этого вам нужно получить все строки, содержащие переводы для тайских слов. Если вы посмотрите исходный файл страницы, то заметите, что первые несколько строк <tr являются заголовками, которые содержат только заголовки, поэтому мы их опускаем. После этого мы получим все элементы <td> из строки (в этой таблице всегда есть 3 <td> элементов) и извлекем из них слова (в этой таблице слова фактически вложены в и).

table_rows = table.findAll('tr') 
# We will skip first 3 rows beacause those are not
# contain information we need
for tr in table_rows[3:]:
    # Finding all <td> elements
    row_columns = tr.findAll('td')
    if len(row_columns) >= 2:
        # Get tag with Thai word
        thai_word_tag = row_columns[0].select_one('span > a')
        # Get tag with English word
        english_word_tag = row_columns[1].find('span')
        if thai_word_tag:
            thai_word = thai_word_tag.text
        if english_word_tag:
            english_word = english_word_tag.text
        # Printing our fetched  words
        print((thai_word, english_word))

Конечно, это очень простой пример того, что мне удалось разобрать со страницы, и вы должны решить для себя, что вы хотите удалить. Я также заметил, что данные внутри таблицы не всегда имеют переводы, поэтому вам следует помнить об этом при очистке данных. Вы также можете использовать библиотеку Requests-HTML для анализа данных (она поддерживает разбиение на страницы, которые представлены в таблице на странице, которую вы хотите просмотреть).

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