Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python: Web
Войти
Регистрация
Восстановить пароль
 
gordan11
1 / 1 / 1
Регистрация: 16.05.2013
Сообщений: 240
#1

Прочитать html файл - Python

26.03.2016, 21:39. Просмотров 519. Ответов 5
Метки нет (Все метки)

Доброго времени суток! Нужно найти в html файле и записать в txt текст между тегами span
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/env python
# -*- coding: utf-8 -*-
out = open('out.txt','w')
for i in range(1, 30):
    name_file = str(i) + '.html'
    f = open(name_file, 'r', encoding= 'utf8')
    for line in f:
        line_file = f.readline()
        star = line_file.find('<span>') + 6
        end = line_file.find('</span>')
        temp = line_file[star:end:1]
        out.writelines(temp)
        line_file = ''
        star = ''
        end = ''
    name_file = ''
    f.close()
    line_file = ''
    star =''
    end = ''
out.close()
Выдает такую ошибку
Python
1
2
3
4
5
6
Traceback (most recent call last):
  File "C:/Users/NOUT/Desktop/teams/147.py", line 7, in <module>
    for line in f:
  File "C:\Users\NOUT\Miniconda3\lib\codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x9e in position 2591: invalid start byte

http://www.cyberforum.ru/python/thread2125345.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2016, 21:39
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Прочитать html файл (Python):

Pyhton3 прочитать .doc файл
Здравствуйте, с .docx форматом проблем не возникло, решение взял тут...

Прочитать файл, проверить содержимое и отредактировать
Привет всем, нуждаюсь в помощи тех, кто с таким сталкивался, язык Python 2.7 ...

Как прочитать файл в кодировке cp1251?
Написал такой код: inputFile = codecs.open('input.txt', 'r', 'cp1251') words...

Прочитать файл данных (формата TSV) и подсчитать для каждого класса средний рост учащихся
Дан файл с таблицей в формате TSV с информацией о росте школьников разных...

сохранить html страницу в файл
Нужно сохранить страницы html -код в txt файл. Выполняю import...

5
alex925
2660 / 2272 / 625
Регистрация: 19.03.2012
Сообщений: 8,821
27.03.2016, 02:13 #2
gordan11, гораздо проще будет использую например lxml.html распарсить текст и изменить нужный кусок
0
gordan11
1 / 1 / 1
Регистрация: 16.05.2013
Сообщений: 240
27.03.2016, 11:14  [ТС] #3
Цитата Сообщение от alex925 Посмотреть сообщение
gordan11, гораздо проще будет использую например lxml.html распарсить текст и изменить нужный кусок
Мне изменять не нужно. У меня есть 29 страниц html, между <span> </span> написаны города, вот их мне нужно и вытащить.
0
Jabbson
Модератор
Эксперт по компьютерным сетям
3344 / 2419 / 745
Регистрация: 03.11.2009
Сообщений: 7,759
Записей в блоге: 3
27.03.2016, 11:29 #4
Можете приложить пример такого html файла?
0
gordan11
1 / 1 / 1
Регистрация: 16.05.2013
Сообщений: 240
27.03.2016, 11:40  [ТС] #5
Цитата Сообщение от Jabbson Посмотреть сообщение
Можете приложить пример такого html файла?
Расширение на html поменяйте
0
Вложения
Тип файла: zip 2.zip (18.7 Кб, 2 просмотров)
Jabbson
Модератор
Эксперт по компьютерным сетям
3344 / 2419 / 745
Регистрация: 03.11.2009
Сообщений: 7,759
Записей в блоге: 3
27.03.2016, 20:33 #6
Как насчет:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# -*- coding: utf-8 -*-
import requests
from lxml import html
from queue import Queue
from threading import Thread
 
# print('*** Getting a cookie')
# url = 'http://2016.ufoctf.ru/'
# r = requests.head(url)
# cookies = {'session': 'None'} #r.cookies['session']}
 
# number of pages to parse
print('*** Getting number of pages:', end=' ')
url = 'http://2016.ufoctf.ru/teams'
r = requests.get(url) #, cookies=cookies)
page = html.fromstring(r.content)
max_page = int(page.cssselect('div.text-center a')[-3].text)
print(max_page)
 
# final list of cities
cities = list()
 
# queue with urls
enclosure_queue = Queue()
for i in range(1, max_page+1):
    enclosure_queue.put('http://2016.ufoctf.ru/teams/{}'.format(i))
 
 
# function to collect cities from a page
def collect_cities(q):
    while True:
        url = q.get()
        r = requests.get(url) #, cookies=cookies)
        page = html.fromstring(r.content)
        cities.extend([x.text for x in page.cssselect('table#teamsboard tr td.hidden-xs span') if x.text])
        q.task_done()
 
# creating workers
for i in range(15):
    worker = Thread(target=collect_cities, args=(enclosure_queue,))
    worker.setDaemon(True)
    worker.start()
 
print('*** Work in progress')
enclosure_queue.join()
print('\n*** Collected cities:\n', len(cities), cities)
print('\n*** Unique cities:\n', len(set(cities)), set(cities))
Код
*** Getting a cookie
*** Getting number of pages
*** Work in progress

*** Collected cities:
 158 ['Rostov-on-Don', 'Воронеж', 'Жуковский', 'Москва', 'Королёв', 'Саратов', 'Омск', 'Владивосток', 'Уфа', 'Москва', 'Хабаровск', 'Кисловодск', 'Таганрог', 'Красноярск', 'Москва', 'Борисоглебск', 'Innopolis', 'Таганрог', 'Подольск', 'Архангельск', 'Харьков, Украина', 'Нижний Новгород', 'Иркутск', 'Иркутск', 'Москва', 'Tomsk', 'Екатеринбург', 'Мытищи', 'Санкт-Петербург', 'Санкт-Петербург', 'Таганрог', 'Владивосток', 'Зеленогорск', 'Омск', 'Екатеринбург', 'Москва', 'Киев', 'Владивосток', 'Екатеринбург', 'Самара', 'Москва', 'Москва', 'Оренбург', 'Салават', 'Белгород', 'Ростов-на-Дону', 'Витебск', 'Санкт-Петербург', 'Ижевск', 'Омск', 'Пермь', 'Пермь', 'Москва', 'Боготол', 'https://docs.google.com/document', 'Барнаул', 'барнаул', 'Хабаровск', 'Барнаул', 'Барнаул', 'барнаул', 'Барнаул', 'Барнаул', 'Барнаул', 'Грозный', 'Истра', 'Ижевск', 'Барнаул', 'Владивосток', 'Владивосток', 'Учалы', 'Барнаул', 'Москва', 'Надым', 'Жуковский', 'Орел', 'Пермь', 'Таганрог', 'Новосибирск', 'Москва', 'Санкт-петербург', 'Екатеринбург', 'Нижний Новгород', 'Пермь', 'Владивосток ', 'Барнаул', 'Новосибирск', 'Енакиево', 'Усть-Кут', 'Ухта', 'Мытищи', 'Санкт-Петербург', 'Таганрог', 'Таганрог', 'Таганрог', 'Саратов', 'Новосибирск', 'Таганрог', 'Краснодар', 'Мытищи', 'Новосибирск', 'Москва', 'Мытищи', 'Нижний Новгород', 'Курчатов', 'Томск', 'Таганрог', 'Владивосток', 'Санкт-Петербург', 'Москва', 'Москва', 'Москва', 'Харьков', 'Мураши', 'Омск', 'Омск', 'Хабаровск', 'Махачкала', 'Владивосток', 'Сочи', 'Сочи', 'Москва', 'Москва', 'С. Писаревка', 'Томск', 'Сергиев Посад', 'Казань', 'Вильнюс', 'Москва', 'Москва', 'Москва', 'Воронеж', 'УФа', 'Таганрог', 'Уфа', 'Екатеринбург', 'Екатеринбург', 'Москва', 'Владивосток', 'Красноярск', 'Барнаул', 'Ижевск', 'Красноярск', 'Томск', 'СПБ', 'Иркутск', 'Москва', 'Астрахань', 'Пермь', 'Москва', 'Самара', 'Самара', 'Екатеринбург', 'Москва', 'Владивосток', 'Владивосток', 'Томск', 'Боготол']

*** Unique cities:
 63 {'Усть-Кут', 'Грозный', 'Таганрог', 'Витебск', 'Киев', 'Самара', 'Барнаул', 'Воронеж', 'Саратов', 'Tomsk', 'СПБ', 'Подольск', 'Новосибирск', 'Махачкала', 'Кисловодск', 'Королёв', 'Красноярск', 'Санкт-петербург', 'Владивосток ', 'Пермь', 'Вильнюс', 'барнаул', 'Енакиево', 'Краснодар', 'Астрахань', 'Rostov-on-Don', 'Ухта', 'Учалы', 'Архангельск', 'Москва', 'Оренбург', 'Екатеринбург', 'Харьков', 'Владивосток', 'Борисоглебск', 'Орел', 'Боготол', 'Казань', 'Уфа', 'УФа', 'Белгород', 'Харьков, Украина', 'Ростов-на-Дону', 'С. Писаревка', 'Омск', 'Innopolis', 'Курчатов', 'Надым', 'Санкт-Петербург', 'Томск', 'Мураши', 'Салават', 'Сочи', 'Нижний Новгород', 'Зеленогорск', 'Мытищи', 'Хабаровск', 'https://docs.google.com/document', 'Иркутск', 'Истра', 'Сергиев Посад', 'Жуковский', 'Ижевск'}
Добавлено через 3 часа 43 минуты
как вариант

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import asyncio
import aiohttp
from lxml import html
 
 
@asyncio.coroutine
def fetch_page(url):
    response = yield from aiohttp.request('GET', url)
    content = yield from response.read()
    page = html.fromstring(content)
    result.extend([x.text for x in page.cssselect('table#teamsboard tr td.hidden-xs span') if x.text])
 
result = []
loop = asyncio.get_event_loop()
tasks = [fetch_page('http://2016.ufoctf.ru/teams/{}'.format(x)) for x in range(1,31)]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
 
print(set(result))
0
27.03.2016, 20:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.03.2016, 20:33
Привет! Вот еще темы с решениями:

Не удается открыть локальный html файл в beautifulsoup
Пишу так with open(main_last_addr+'.html', 'w+') as out2: ...

Ошибка HTML "No module named 'html.entities'; 'html' is not a package"
Добрый день. Подскажите, пожалуйста, следующий вопрос. У меня есть парсер...

Конвертировать html элемент в текстовое представление html
Нужно полученный элемент html - div с классом document превратить html код. То...

Нужно прочитать html файл
Мне необходимо скачать html - файл и прочитать.Не можете скинуть уроки,а лучши...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru