Premier problème: les données sont en fait dans un iframe dans un cadre; vous devez regarder https://www.schwab.wallst.com/public/research/stocks/summary.asp?user_id=schwabpublic&symbol=APC (où vous remplacez le symbole approprié à la fin de l'URL).
Deuxième problème: extraire les données de la page. Personnellement, j'aime lxml et xpath, mais il y a beaucoup de paquets qui feront l'affaire. Je me attends probablement un code comme
import urllib2
import lxml.html
import re
re_dollars = '\$?\s*(\d+\.\d{2})'
def urlExtractData(url, defs):
"""
Get html from url, parse according to defs, return as dictionary
defs is a list of tuples ("name", "xpath", "regex", fn)
name becomes the key in the returned dictionary
xpath is used to extract a string from the page
regex further processes the string (skipped if None)
fn casts the string to the desired type (skipped if None)
"""
page = urllib2.urlopen(url) # can modify this to include your cookies
tree = lxml.html.parse(page)
res = {}
for name,path,reg,fn in defs:
txt = tree.xpath(path)[0]
if reg != None:
match = re.search(reg,txt)
txt = match.group(1)
if fn != None:
txt = fn(txt)
res[name] = txt
return res
def getStockData(code):
url = 'https://www.schwab.wallst.com/public/research/stocks/summary.asp?user_id=schwabpublic&symbol=' + code
defs = [
("stock_name", '//span[@class="header1"]/text()', None, str),
("stock_symbol", '//span[@class="header2"]/text()', None, str),
("last_price", '//span[@class="neu"]/text()', re_dollars, float)
# etc
]
return urlExtractData(url, defs)
Quand appelé
print repr(getStockData('MSFT'))
retourne
{'stock_name': 'Microsoft Corp', 'last_price': 25.690000000000001, 'stock_symbol': 'MSFT:NASDAQ'}
Troisième problème: le balisage sur cette page de présentation, et non structurelle - qui dit moi que le code basé sur il sera probablement fragile, à savoir tout changement à la structure de la page (ou la variation entre les pages) nécessitera de retravailler vos xpaths.
Espérons que ça aide!
@hugh Je voudrais obtenir les données de cette page. Ensuite, utilisez les nouvelles compétences trouvées et le code pour les autres pages, Merci pour les idées. Il n'y a aucun moyen de scaper cette page. Ajoutez l'authentification et obtenez des données en temps réel. J'ai seulement besoin des données présentées. La liste sybmol 50+ .... Encore une fois, merci beaucoup pour vos efforts. J'ai besoin d'apprendre comment scape cette page ...... – Merlin
Son complètement cassé, maintenant que j'ai commencé à utiliser lxml, pouvez-vous me dire comment vous l'avez réparé, si vous le corrigez. – Merlin
@ user428862: en quoi est-il "complètement cassé"? Le code ci-dessus semble toujours fonctionner pour moi. –