Программа поиска по ключевым словам не работает после перехода на Python 3 - возможно, ошибка связана с urllib - PullRequest
0 голосов
/ 10 декабря 2018

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

import urllib2
import csv
import sys

string_match1 = 'edgar/data/1360901/000136090118000006/0001360901-18- 
000006.txt'

url3 = 'https://www.sec.gov/Archives/'+string_match1

response3 = urllib2.urlopen(url3)

words = ['anticipate',  'believe', 'depend', 'fluctuate', 'indefinite', 
'likelihood', 'possible', 'predict', 'risk', 'uncertain']

count={}
for elem in words:
    count[elem] = 0

for line in response3:
    elements = line.split()
    for word in words:
        count[word] = count[word]+elements.count(word)

print (count)

Это работало в Python 2, однако, когда я попытался запустить его на Python 3, это не удалось.Я думал, что проблема была с обновлением urllib.Поэтому я изменил его сам и использовал 2to3.py, чтобы получить следующее:

import urllib.request, urllib.error, urllib.parse
import csv
import sys

string_match1 = 'edgar/data/1360901/000136090118000006/0001360901-18- 
000006.txt'

url3 = 'https://www.sec.gov/Archives/'+string_match1

response3 = urllib.request.urlopen(url3)

words = ['anticipate',  'believe', 'depend', 'fluctuate', 'indefinite', 
'likelihood', 'possible', 'predict', 'risk', 'uncertain']

count={}
for elem in words:
    count[elem] = 0

for line in response3:
    elements = line.split()
    for word in words:
        count[word] = count[word]+elements.count(word)

print (count)

Это избавило от ошибки, но программа больше не работает.Теперь это вывод: слова в словаре отображаются, но каждый счет равен 0, когда он должен быть ненулевым.

enter image description here

1 Ответ

0 голосов
/ 10 декабря 2018

Вам необходимо внести следующие изменения в свой код:

request = urllib.request.Request(url3)

response3 = urllib.request.urlopen(request)

htmlBytes = response3.read()
htmlStr = htmlBytes.decode("utf8")

words = ['anticipate',  'believe', 'depend', 'fluctuate', 'indefinite', 
'likelihood', 'possible', 'predict', 'risk', 'uncertain']

count={}
for elem in words:
    count[elem] = 0

htmlSplit = htmlStr.split('\n')
for elements in htmlSplit:
    for word in words:
        count[word] = count[word]+elements.count(word)
...