Python Как почистить изображения, тексты и ссылки на аудио-файл URL - PullRequest
1 голос
/ 10 июня 2019

Я пытаюсь очистить данные со следующего URL (http://www.ancient -hebrew.org / m / dictionary / 1000.html ).

Поэтому каждый раздел ивритского слова начинается сimg urls, за которыми следуют 2 текста, собственно еврейское слово и его произношение.Например, первая запись в URL-адресе выглядит следующим образом: «img1 img2 img3 אֶלֶף e-leph», ивритское слово - это юникод после загрузки html с помощью wget

. Я пытаюсь собрать эту информацию для того, чтобы ясначала получите файлы изображений, затем ивритское слово и затем произношение.Наконец, я хотел бы найти URL для аудиофайла.

Также каждая строка для каждого слова, кажется, начинается с тега

Я новичок в изучении веб-страниц, поэтому все, что я смог сделать, это следующее.

from urllib.request import urlopen
from bs4 import BeautifulSoup

url = '1000.html'

try:
    page = urlopen(url)
except:
    print("Error opening the URL")

soup = BeautifulSoup(page, 'html.parser')

content = soup.find('<!--501-1000-->', {"<A Name= "})

images = ''
for i in content.findAll('*.jpg'):
    images = images + ' ' +  i.text

with open('scraped_text.txt', 'w') as file:
    file.write(images)


Как вы видите, мой код на самом деле не выполняет свою работу.В конце я хотел бы получить информацию для каждого слова в URL и сохранить его как текстовый файл или файл json, в зависимости от того, что проще.

Например, изображения: URLsOfImages, HebrewWord: txt, Произношение: txt, URLtoAudio: txt

и для следующего слова и т. Д.

1 Ответ

0 голосов
/ 21 июня 2019

Я написал скрипт, который должен вам помочь.Он содержит всю информацию, которую вы запросили.Его нельзя сохранить как файл json из-за букв иврита, иначе он был бы сохранен как байты.Я знаю, что вы опубликовали этот вопрос некоторое время назад, но я нашел его сегодня и решил попробовать.Во всяком случае, вот оно:

import requests
from bs4 import BeautifulSoup
import re
import json


url = 'http://www.ancient-hebrew.org/m/dictionary/1000.html'
page = requests.get(url)

soup = BeautifulSoup(page.text, 'html.parser')

def images():
    #Gathers all the images (this includes unwanted gifs)
    imgs = soup.find_all('img')

    #Gets the src attribute to form the full url
    srcs = [img['src'] for img in imgs]
    base_url = 'https://www.ancient-hebrew.org/files/'

    imgs = {}
    section = 0
    #Goes through each source of all the images
    for src in srcs:
        #Checks if it is a gif, these act as a separator
        if src.endswith('.gif'):
            #If it is a gif, change sections (acts as separator)
            section += 1
        else:
            #If it is a letter image, use regex to extract the part of src we want and form full url
            actual_link = re.search(r'files/(.+\.jpg)', src)
            imgs.setdefault(section, []).append(base_url + actual_link.group(1))
    return imgs

def hebrew_letters():
    #Gets hebrew letters, strips whitespace, reverses letter order since hebrew letters get messed up
    h_letters = [h_letter.text.strip() for h_letter in soup.find_all('font', attrs={'face': 'arial'})]
    return h_letters

def english_letters():
    #Gets english letters by regex, this part was difficult because these letters are not surrounded by tags in the html
    letters = ''.join(str(content) for content in soup.find('table', attrs={'width': '90%'}).td.contents)
    search_text = re.finditer(r'/font>\s+(.+?)\s+<br/>', letters)
    e_letters = [letter.group(1) for letter in search_text]
    return e_letters

def get_audio_urls():
    #Gets all the mp3 hrefs for the audio part
    base_url = 'https://www.ancient-hebrew.org/m/dictionary/'
    links = soup.find_all('a', href=re.compile(r'\d+\s*.mp3$'))
    audio_urls = [base_url+link['href'].replace('\t','') for link in links]
    return audio_urls

def main():
    #Gathers scraped data
    imgs = images()
    h_letters = hebrew_letters()
    e_letters = english_letters()
    audio_urls = get_audio_urls()

    #Encodes data into utf-8 (due to hebrew letters) and saves it to text file
    with open('scraped_hebrew.txt', 'w', encoding='utf-8') as text_file:
        for img, h_letter, e_letter, audio_url in zip(imgs.values(), h_letters, e_letters, audio_urls):
            text_file.write('Image Urls: ' + ' - '.join(im for im in img) + '\n')
            text_file.write('Hebrew Letters: ' + h_letter + '\n')
            text_file.write('English Letters: ' + e_letter + '\n')
            text_file.write('Audio Urls: ' + audio_url + '\n\n')


if __name__ == '__main__':
    main()

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