Im früheren Blog führten wir die Raupen kriechen Hochschulrankings, dieses Blog wir das Programm einführen Bestandsdaten zu klettern.
Programm Quelle: China University of MOOC Network " Web - Crawler und Informationsextraktion Programm ."
Ziel des Programm: Holen Sie sich den Shanghai Stock Exchange und der Shenzhen Stock Exchange ist Teil der Bestandsinformationen, Ausgabe in eine Datei.
Lesen Sie die folgenden Programmanforderungen im Voraus um die Bibliothek zu wissen, BeautifulSoup Bibliothek und Re - Bibliothek, in dem „ Web - Crawler und Informationsextraktion Programm “ hat relevantes Wissen zur Verfügung gestellt.
Importanfragen von bs4 importieren BeautifulSoup importieren re def getHTMLText (url, code = "utf-8"): try: r = request.get ( url) r.raise_for_status () r.encoding = code # Geben Sie die Dekodierung direkt mit utf-8 an return r.text außer: return "" def getStockList (lst, stockURL): html = getHTMLText (stockURL, "GB2312") # Das Dongfang Fortune Network verwendet die GB2312-Codierungssuppe = BeautifulSoup (html, 'html.parser') a = oup.find_all ('a') [: 200] # Das Aktiensymbol befindet sich im href-Attribut im a-Tag. Wir nehmen nur die ersten 100 a-Tags für i in a: try: href = i.attrs ['href'] lst.append (re.findall (r "\ d {6}", außer: continue def getStockInfo (lst, stockURL, fpath): count = 0 für Lager in lst: url = stockURL + Lager # Link zu Informationen zu jedem Lager html = getHTMLText (url) try: if html == "": continue infoDict = {} # Alle Bestandsinformationen werden im Wörterbuch suppe = BeautifulSoup (html, 'html.parser') gespeichert. StockInfo =oup.find ('div', attrs = ('class': 'stock-info'}) name = stockInfo.find_all (attrs = {'class': 'stock-name'}) [0] infoDict.update ({'stock name': name.text.split () [0]}) # .text kann Tags entfernen Die Zeichenfolge in keyList = stockInfo.find_all ('dt') [:4] # Nehmen Sie nur die ersten 4 Informationen des Bestands valueList = stockInfo.find_all ('dd') [: 4] count = count + 1 für i im Bereich (len (keyList)): key = keyList [i] .text val = valueList [i] .text infoDict [key] = val mit open (fpath, 'a', encoding = 'utf-8') als f: f.write (str (infoDict) + '\ n') count = count + 1 print ("\ rcurrent progress: {: .2f}%". format (count * 100 / len (lst)), end = "") # \ r bedeutet, zum Anfang der aktuellen Zeile zurückzukehren. Der gedruckte Inhalt überschreibt den vorherigen gedruckten Inhalt. # Nach jedem Druck wird er automatisch umbrochen. end wird verwendet, um den Zeilenumbruch abzubrechen. außer: PRINT ( "\ r aktuellen Fortschritt: {:} .2f%" "" das Format (Count * 100 / len (LST)), End =) Weiter DEF main (): stock_list_url = ‚HTTPS: //quote.eastmoney. com / stock_list.html '# Code jeder Aktie dongfangcaifuwang erhalten stock_info_url =' https://www.laohu8.com/stock/ '# Informationen von jedem Ort erhalten Gemeinschaft stock Tiger output_file =' / Users / wangpeng / Desktop / BaiduStockInfo.txt ' slist = [] getStockList (slist, stock_list_url) getStockInfo (slist, stock_info_url, output_file) main ()
Datei-Ergebnisse: