Очистка чисел из HTML с помощью Python и BeautifulSoup

Вот моя домашняя работа:

В этом задании вы напишете программу Python, похожую на http://www.py4e.com/code3/urllink2.py. Программа будет использовать urllib для чтения HTML-кода из файлов данных ниже, анализа данных, извлечения чисел и вычисления суммы чисел в файле.

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

Примеры данных: http://py4e-data.dr-chuck.net/comments_42.html (сумма = 2553)

Фактические данные: http://py4e-data.dr-chuck.net/comments_228869.html (сумма заканчивается на 10)

Вам не нужно сохранять эти файлы в своей папке, поскольку ваша программа будет считывать данные прямо с URL-адреса. Примечание. У каждого учащегося будет отдельный URL-адрес данных для задания, поэтому для анализа используйте только свой собственный URL-адрес.

Я хочу исправить свой код, поскольку это то, что я изучил до сих пор. Я получаю ошибку как имя

urlib не определен

.. если играю с импортом то у меня проблема с сокетами.

import urllib
import re
from bs4 import BeautifulSoup


url = input('Enter - ')
html = urlib.request(url, context=ctx).read()
soup = BeautifulSoup(html, "html.parser")


sum=0
# Retrieve all of the anchor tags
tags = soup('span')
for tag in tags:
    # Look at the parts of a tag
    y=str(tag)
    x= re.findall("[0-9]+",y)
    for i in x:
        i=int(i)
        sum=sum+i
print(sum)

person Jacek Zajdel    schedule 23.07.2019    source источник
comment
Если я изменю его на urllib.request import urlopen, то у меня есть сокет модуля, не имеющий атрибута как AF_INET   -  person Jacek Zajdel    schedule 23.07.2019


Ответы (2)


Опечатка: у вас urlib, должно быть urllib. context=ctx не требуется:

import re
import urllib
from bs4 import BeautifulSoup

# url = 'http://py4e-data.dr-chuck.net/comments_42.html'
url = 'http://py4e-data.dr-chuck.net/comments_228869.html'

soup = BeautifulSoup(urllib.request.urlopen(url).read(), 'html.parser')
s = sum(int(td.text) for td in soup.select('td:last-child')[1:])

print(s)

Печать:

2410

РЕДАКТИРОВАТЬ: запуск вашего скрипта:

import urllib.request
import re
from bs4 import BeautifulSoup


html = urllib.request.urlopen('http://py4e-data.dr-chuck.net/comments_228869.html').read()
soup = BeautifulSoup(html, "html.parser")

sum=0
# Retrieve all of the anchor tags
tags = soup('span')
for tag in tags:
    # Look at the parts of a tag
    y=str(tag)
    x= re.findall("[0-9]+",y)
    for i in x:
        i=int(i)
        sum=sum+i
print(sum)

Печать:

2410
person Andrej Kesely    schedule 23.07.2019
comment
эй, спасибо за ответ, я изменил его на double l, и теперь я получаю urllib, у меня нет запроса на атрибут ... если я не смогу исправить свой код, я воспользуюсь предоставленным вами, но я буду более счастлив использовать мой - person Jacek Zajdel; 23.07.2019
comment
3.7 ... я наверное тогда перепутал импорт - person Jacek Zajdel; 23.07.2019
comment
теперь, когда я запускаю его, это «сокет», у него нет атрибута «AF_INET» - person Jacek Zajdel; 23.07.2019
comment
shiit ... это меня смутило, и у меня есть программа сокета в той же папке, и по какой-то причине произошла ошибка ... теперь все хорошо, очень хорошо, но почему, если я запускаю i command promp python smth.py ошибка отображается в другом файле? Это подключено !! - person Jacek Zajdel; 23.07.2019

person    schedule
comment
это было задание на coursera, и напишите, как это, это будет работать определенно, и ответ 2386 для файла на url: py4e-data.dr-chuck.net/comments_521301.html - person Harsh; 04.06.2020