Python3: как получить заголовок eng из url?

#python-3.x #url

#python-3.x #url

Вопрос:

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

 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. Может быть, вы хотите использовать этот URL: english-thai-dictionary.com/dictionary/?sa=all;ftlang=тогда ?

2. все еще не могу сделать.

3. Вы имеете в виду, что хотите получить английские слова из html-таблицы со страницы?

4. ДА. Я хочу, чтобы на этой странице были английские и тайские слова.

Ответ №1:

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

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

 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 для анализа данных (она поддерживает разбивку на страницы, которая присутствует в таблице на странице, которую вы хотите очистить).