Python Web очищает графики акций, код застрял, когда символ акций не найден - PullRequest
0 голосов
/ 25 марта 2019

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

Однако, когда возникает ошибка с символом, веб-сайт перенаправляется на другую страницу иpython прекращает запуск оставшихся символов

мой список символов: WOW, AAR, TPM

ошибка происходит в AAR

Кто-нибудь может дать несколько советов по этому Py noob?


from urllib import urlopen
from bs4 import BeautifulSoup
import re

newsymbolslist = ['WOW','AAR','TPM']

i=0

try:
    while i < len(newsymbolslist):
        try:
            html = urlopen( 'http://bigcharts.marketwatch.com/quickchart/quickchart.asp?symb=AU%3A'+newsymbolslist[i])
            bs = BeautifulSoup(html, 'html.parser')
            images = bs.find_all('img', {'src': re.compile('market')})
            for image in images:
                print (image['src'] + '\n')
                i += 1
        except:
            print "error"
            i += 1
except:
    pass

Лучший результат заключается в том, что он получает всю ссылку на биржевые диаграммы, может сообщить мне, какой символ акции обнаружил ошибку и продолжает запускать оставшиеся символы

Спасибо

Ответы [ 3 ]

0 голосов
/ 25 марта 2019

логическая ошибкаВот изменение, которое, я думаю, поможет вам оторваться.

from urllib import urlopen
from bs4 import BeautifulSoup
import re

newsymbolslist = ['WOW','AAR','TPM']

i=0

try:
    while i < len(newsymbolslist):
        try:
            html = urlopen( 'http://bigcharts.marketwatch.com/quickchart/quickchart.asp?symb=AU%3A'+newsymbolslist[i])
            bs = BeautifulSoup(html, 'html.parser')
            images = bs.find_all('img', {'src': re.compile('market')})
            for image in images:
                print (image['src'] + '\n')
            i += 1
        except:
            print "error"
            i += 1
except:
    pass

Возможно, это немного проще:

from urllib import urlopen
from bs4 import BeautifulSoup
import re

newsymbolslist = ['WOW','AAR','TPM']

try:
    for symbol in newsymbolslist:
        try:
            html = urlopen( 'http://bigcharts.marketwatch.com/quickchart/quickchart.asp?symb=AU%3A'+symbol)
            bs = BeautifulSoup(html, 'html.parser')
            images = bs.find_all('img', {'src': re.compile('market')})
            for image in images:
                print (image['src'] + '\n')
        except:
            print "error"
except:
    pass
0 голосов
/ 25 марта 2019

Чуть более кратко и повторно использовать существующее соединение:

import requests
from bs4 import BeautifulSoup

newSymbolsList = ['WOW','AAR','TPM']

with requests.Session() as s:
    for symbol in newSymbolsList:
        try:
            html = s.get('http://bigcharts.marketwatch.com/quickchart/quickchart.asp?symb=AU%3A'+ symbol).content
            bs = BeautifulSoup(html, 'lxml')
            images = [img['src'] for img in bs.select('img[src*=market]')]
            print(images)
        except Exception as e:
            print("error", e)
0 голосов
/ 25 марта 2019

Нет исключения, если символ не существует. Это означает, что i не увеличивается, поскольку он находится внутри цикла for, перебирая найденные изображения (просто пустой список в случае AAR). В результате i никогда не выполняет условие прерывания цикла while, и оно продолжается вечно. Перемещение i+=1 в блок finally обеспечивает постоянное увеличение.

from urllib import urlopen
from bs4 import BeautifulSoup
import re
newsymbolslist = ['WOW','AAR','TPM']
i=0
try:
    while i < len(newsymbolslist):
        try:
            html = urlopen( 'http://bigcharts.marketwatch.com/quickchart/quickchart.asp?symb=AU%3A'+newsymbolslist[i])
            bs = BeautifulSoup(html, 'html.parser')
            images = bs.find_all('img', {'src': re.compile('market')})
            for image in images:
                print (image['src'] + '\n')      
        except Exception as e:
            print "error"
        finally:
            i += 1
except:
    pass

В качестве улучшения вы можете полностью удалить цикл while, просто перебирая список символов, который у вас есть. Тогда вам не нужно беспокоиться об увеличении i:

for symbol in newsymbolslist:
    try:
        html = urlopen( 'http://bigcharts.marketwatch.com/quickchart/quickchart.asp?symb=AU%3A'+symbol)
        bs = BeautifulSoup(html, 'html.parser')
        images = bs.find_all('img', {'src': re.compile('market')})
        for image in images:
            print (image['src'] + '\n')      
    except Exception as e:
        print "error"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...