0
import requests
from bs4 import BeautifulSoup
import os, re
import sys, traceback    


#это тхт файл со списками линков на все посты жж
#он имеет вид:
#November 15th, 2006 - Волков Сергей Владимирович  
#(no subject)  
#http://salery.livejournal.com/339.html

#November 19th, 2006 - Волков Сергей Владимирович  
#Впечатления от комментариев  
#http://salery.livejournal.com/767.html и т.д. до конца жж

LINKS = 'C:\\Users\\...\\Desktop\\to.txt'


def main():
    f = open(LINKS, 'r')

    for i in f:

        try:
            match = re.match('http', i)

            if match:
                r = requests.get(i, 'html.parser')
                soup = BeautifulSoup(r.content, 'html.parser')
                t = (soup.find('td', colspan='2').text) 
                print(t, '\n', i)
                input()

            else:
                pass

        except ValueError:
            print(traceback.format_exception(*sys.exc_info())[1])  
            input()

    input()

вот что выдает консоль: первые два поста из файла тхт парсятся норм, 5-й тоже; на 3,4 посты и далее до конца выдается текст:
File "C:\Users....\Desktop\Volkov\posts.py", line 22, in main
print(t, '\n', i)

Вопросы:
1. как прикрепить тхт файл для желающих проверить в чем дело?
2. в чем ошибка?
3. могу послать тхт по мылу
4. я словил ошибку:
http://salery.livejournal.com/947.html
Error: 'charmap' codec can't encode character '\u2026' in position 54: character maps to undefined

введите сюда описание изображения

VladD
  • 206,799
Mintaj
  • 53
  • 1
    не нужно сюда прикреплять ваш файл со ссылками. Вместо этого, сохраните html страничку, которая ваш код ломает в локальный файл. Проверьте что html из файла действительно продолжает ту же ошибку вызывать (вместо r.content, подставьте open('input.html', 'rb').read()). Затем удалите из него половину, проверьте что ошибку осталась. Если ошибка исчезла, то удалите другую половину. Проверьте наличие ошибки. Повторяйте до тех пор, пока у вас не останется небольшой кусок html, который позволяет вам ошибку воспроизвести. Вставьте этот небольшой кусок html прямо в ваш код (вместо open().read()) – jfs Mar 29 '17 at 01:58
  • что такое 'input.html'? @jfs – Mintaj Mar 29 '17 at 02:16
  • " сохраните html страничку, которая ваш код ломает в локальный файл." -- input.html это локальный файл куда вы сохранили r.content, который ломает ваш код. – jfs Mar 29 '17 at 02:18
  • @jfs спасиб, но один хрен не могу понять, код то придется полностью переписать, я ж делаю итерацию по линкам, а тут 1 файл – Mintaj Mar 29 '17 at 02:22
  • @jfs извините мою тупость, я ультралюбитель. так? def main(): try: r = requests.get(путьДоХТМЛ, 'html.parser') soup = BeautifulSoup(open(путьДоХТМЛ, 'rb').read(), 'html.parser') t = (soup.find('td', colspan='2').text) print(t) input() except ValueError: print(traceback.format_exception(*sys.exc_info())[1])
    input()
    – Mintaj Mar 29 '17 at 02:38
  • да, для вопроса следует создать минимальный пример кода, задача которого продемонстрировать проблему, он не должен ничего другого делать (когда проблема разрешится, вы его просто выбрасываете), а не публиковать весь код, который у вас есть. В комментарии код не публикуйте. Обновите ваш вопрос вместо этого. – jfs Mar 29 '17 at 02:44
  • @jfs так я и привел минимальный кусок кода в вопросе, а еще более минимальный - вот: "print(t, '\n', i)" – Mintaj Mar 29 '17 at 02:53
  • нет, код у вас не является минимальным (можно убрать из него части, а проблема останется). Мне кажется я вам уже приводил ссылку: [mcve] – jfs Mar 29 '17 at 03:04
  • @jfs если убрать из него части, это уже не будет код. в любом случае спасибо – Mintaj Mar 29 '17 at 03:29
  • если вы прочтёте ссылку, которую я дал, то вы поймёте, что это не так. Не поленитесь, прочитайте ссылку -- она вам поможет не только для данного вопроса, но и для многих будущих проблем: сократит время, требуемое для отладки, а публикация минимального самодостаточного примера поможет другим помочь вам. – jfs Mar 29 '17 at 03:33
  • @jfs вот ошибка здесь первая: http://salery.livejournal.com/947.html Error: 'charmap' codec can't encode character '\u2026' in position 54: character maps to undefined – Mintaj Mar 29 '17 at 04:04
  • @jfs спасибо, все сделал. все тексты вытащил – Mintaj Mar 29 '17 at 08:53

0 Answers0