程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Préparation des données - - Python crawler

編輯:Python

Préface

Alors que nous apprenons quelque chose sur l'apprentissage automatique,.En général, nous n'avons pas besoin d'aller chercher les données nous - mêmes,Parce que beaucoup d'algorithmes d'apprentissage sont très amicaux pour nous aider à emballer les données pertinentes,Mais cela ne veut pas dire que nous n'avons pas besoin d'apprendre et de comprendre.Ici, nous apprenons à ramper trois types de données:Fleurs/Ramper pour l'image de l'étoile、Ramper des images d'artistes chinois、Accès aux données sur les stocks.Apprendre et utiliser trois espèces de reptiles séparément.

  • Expérimentez

    La difficulté de sentir un reptile estURLAccès à,URLL'acquisition est liée à votre propre expérience,J'ai du mal à en être sûr,En généralURLL'accès est obtenu en visitant le site Web par analyse de capture de paquets.En général, il n'est pas nécessaire de saisir un sac,Avec les outils de développement du navigateur(F12/Fn+F12)Pour obtenir.

Fleurs/Ramper l'image de l'étoile

URLAccès

  • Baidu recherche de fleurs mots clés,Et ouvrir les outils de développement,Cliquez surNrtWork

  • Trouver des paquets pour l'analyse,Analyse des paramètres importants

    • pn Indique le chargement de l'image suivante
    • rn Indique combien d'images sont chargées
  • Afficher les valeurs de retour pour l'analyse , Vous pouvez voir que le système d'image ThumbURLMoyenne

Processus de téléchargement

  • http://image.baidu.com/search/acjson? Baidu picture address

  • épissagetn Pour accéder à chaque image URL, Après le retour des données thumbURLMoyenne

    https://image.baidu.com/search/acjson?+tn

  • Pour séparer les images URL Puis accédez au téléchargement

Code

import requests
import os
import urllib class GetImage():
def __init__(self,keyword='Fleurs',paginator=1):
self.url = 'http://image.baidu.com/search/acjson?' self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
} self.keyword = keyword
self.paginator = paginator def get_param(self): keyword = urllib.parse.quote(self.keyword)
params = [] for i in range(1,self.paginator+1):
params.append(
'tn=resultjson_com&logid=10338332981203604364&ipn=rj&ct=201326592&is=&fp=result&fr=&word={}&queryWord={}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=&copyright=&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=1&expermode=&nojc=&isAsync=&pn={}&rn=30&gsm=78&1650241802208='.format(keyword,keyword,30*i) )
return params
def get_urls(self,params):
urls = []
for param in params:
urls.append(self.url+param)
return urls def get_image_url(self,urls):
image_url = []
for url in urls:
json_data = requests.get(url,headers = self.headers).json()
json_data = json_data.get('data')
for i in json_data:
if i:
image_url.append(i.get('thumbURL'))
return image_url
def get_image(self,image_url):
##Selon l'imageurl,Enregistrer l'image
file_name = os.path.join("", self.keyword)
#print(file_name)
if not os.path.exists(file_name):
os.makedirs(file_name) for index,url in enumerate(image_url,start=1):
with open(file_name+'/{}.jpg'.format(index),'wb') as f:
f.write(requests.get(url,headers=self.headers).content) if index != 0 and index%30 == 0:
print("No{}Téléchargement de page terminé".format(index/30)) def __call__(self, *args, **kwargs):
params = self.get_param()
urls = self.get_urls(params)
image_url = self.get_image_url(urls)
self.get_image(image_url=image_url) if __name__ == '__main__':
spider = GetImage('Fleurs',3)
spider()

Ramper l'image de l'étoile

  • Il suffit demain Changez les mots clés dans la fonction , Changez - vous en star

if __name__ == '__main__':
spider = GetImage('Star',3)
spider()

Autres sujets

  • De même, nous avons besoin d'autres images qui peuvent être échangées
if __name__ == '__main__':
spider = GetImage('Animation',3)
spider()

Image de l'artiste rampant

Méthode 1

  • Nous pouvons utiliser la méthode ci - dessus pour accéder à l'image , Changez le mot - clé en artiste chinois ou Grimpez à l'image

Méthode 2

  • .De toute évidence, la méthode ci - dessus peut répondre à une partie de nos besoins , Si nous avons besoin de gravir différents artistes, alors la façon dont il est fait ci - dessus n'est pas si bonne .
  • Nous téléchargerons10 Images de différents artistes , Et nommez l'image par leur nom. , Et les déposer dans pictureDans le dossier

Code

import requests
import json
import os
import urllib def getPicinfo(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0', }
response = requests.get(url,headers) if response.status_code == 200:
return response.text
return None Download_dir = 'picture'
if os.path.exists(Download_dir) == False:
os.mkdir(Download_dir) pn_num = 1
rn_num = 10 for k in range(pn_num):
url = "https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?resource_id=28266&from_mid=500&format=json&ie=utf-8&oe=utf-8&query=%E4%B8%AD%E5%9B%BD%E8%89%BA%E4%BA%BA&sort_key=&sort_type=1&stat0=&stat1=&stat2=&stat3=&pn="+str(pn_num)+"&rn="+str(rn_num)+"&_=1580457480665"
res = getPicinfo(url)
json_str = json.loads(res)
figs = json_str['data'][0]['result'] for i in figs:
name = i['ename']
img_url = i['pic_4n_78']
img_res = requests.get(img_url)
if img_res.status_code == 200:
ext_str_splits = img_res.headers['Content-Type'].split('/')
ext = ext_str_splits[-1]
fname = name+'.'+ext
open(os.path.join(Download_dir,fname),'wb').write(img_res.content) print(name,img_url,'saved')

Accès aux données boursières

Nous sommes d'accord avechttp://quote.eastmoney.com/center/gridlist.html Les données sur les stocks sont récupérées , Et stocker les données

Ramper le Code

# http://quote.eastmoney.com/center/gridlist.html
import requests
from fake_useragent import UserAgent
import json
import csv
import urllib.request as r
import threading def getHtml(url):
r = requests.get(url, headers={
'User-Agent': UserAgent().random,
})
r.encoding = r.apparent_encoding
return r.text # Combien de rampants
num = 20 stockUrl = 'http://52.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112409623798991171317_1654957180928&pn=1&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&wbp2u=|0|0|0|web&fid=f3&fs=m:0+t:80&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_=1654957180938' if __name__ == '__main__':
responseText = getHtml(stockUrl)
jsonText = responseText.split("(")[1].split(")")[0];
resJson = json.loads(jsonText)
datas = resJson['data']['diff']
dataList = []
for data in datas: row = [data['f12'],data['f14']]
dataList.append(row) print(dataList) f = open('stock.csv', 'w+', encoding='utf-8', newline="")
writer = csv.writer(f)
writer.writerow(("Code","Nom"))
for data in dataList:
writer.writerow((data[0]+"\t",data[1]+"\t"))
f.close() def getStockList():
stockList = []
f = open('stock.csv', 'r', encoding='utf-8')
f.seek(0)
reader = csv.reader(f)
for item in reader:
stockList.append(item) f.close()
return stockList def downloadFile(url,filepath): try:
r.urlretrieve(url,filepath)
except Exception as e:
print(e)
print(filepath,"is downLoaded")
pass sem = threading.Semaphore(1) def dowmloadFileSem(url,filepath):
with sem:
downloadFile(url,filepath) urlStart = 'http://quotes.money.163.com/service/chddata.html?code='
urlEnd = '&end=20210221&fields=TCLOSW;HIGH;TOPEN;LCLOSE;CHG;PCHG;VOTURNOVER;VATURNOVER' if __name__ == '__main__':
stockList = getStockList()
stockList.pop(0)
print(stockList) for s in stockList:
scode = str(s[0].split("\t")[0]) url = urlStart+("0" if scode.startswith('6') else '1')+ scode + urlEnd print(url)
filepath = (str(s[1].split("\t")[0])+"_"+scode)+".csv"
threading.Thread(target=dowmloadFileSem,args=(url,filepath)).start()

Code de traitement des données

Il est possible que les données qui ont été rampes à ce moment - là étaient sales , Le code suivant ne fonctionne pas toujours. , Avez - vous besoin de traiter les données vous - même ou d'une autre façon

## Utilisation principalematplotlibPour dessiner des images
import pandas as pd
import matplotlib.pyplot as plt
import csv
import Accès aux données boursières as gp plt.rcParams['font.sans-serif'] = ['simhei'] #Spécifier la police
plt.rcParams['axes.unicode_minus'] = False #Afficher-No.
plt.rcParams['figure.dpi'] = 100 #Points par pouce files = [] def read_file(file_name):
data = pd.read_csv(file_name,encoding='gbk')
col_name = data.columns.values
return data,col_name def get_file_path():
stock_list = gp.getStockList()
paths = []
for stock in stock_list[1:]:
p = stock[1].strip()+"_"+stock[0].strip()+".csv"
print(p)
data,_=read_file(p)
if len(data)>1:
files.append(p)
print(p) get_file_path()
print(files) def get_diff(file_name):
data,col_name = read_file(file_name)
index = len(data['Date'])-1
sep = index//15
plt.figure(figsize=(15,17)) x = data['Date'].values.tolist()
x.reverse()
xticks = list(range(0,len(x),sep))
xlabels = [x[i] for i in xticks]
xticks.append(len(x)) y1 = [float(c) if c!='None' else 0 for c in data['Augmentation ou diminution'].values.tolist()]
y2 = [float(c) if c != 'None' else 0 for c in data['Les hauts et les bas'].values.tolist()] y1.reverse()
y2.reverse() ax1 = plt.subplot(211)
plt.plot(range(1,len(x)+1),y1,c='r')
plt.title('{}-Augmentation ou diminution/Les hauts et les bas'.format(file_name.split('_')[0]),fontsize = 20)
ax1.set_xticks(xticks)
ax1.set_xticklabels(xlabels,rotation = 40)
plt.ylabel('Augmentation ou diminution') ax2 = plt.subplot(212)
plt.plot(range(1, len(x) + 1), y1, c='g')
#plt.title('{}-Augmentation ou diminution/Les hauts et les bas'.format(file_name.splir('_')[0]), fontsize=20)
ax2.set_xticks(xticks)
ax2.set_xticklabels(xlabels, rotation=40)
plt.xlabel('Date')
plt.ylabel('Augmentation ou diminution')
plt.show() print(len(files))
for file in files:
get_diff(file)

Résumé

Trois cas d'extraction de données sont décrits ci - dessus , Différentes rampes de données exigent que nous fassions face à différents URLObtenir, Entrée de différents paramètres ,URLComment combiner、Comment obtenir、 C'est la difficulté d'accéder aux données. , Une certaine expérience et une certaine base sont nécessaires .

【Apprentissage automatique】Préparation des données--python Autre article Afghanistan

  1. PythonTutoriel crawler-01-Introduction aux reptiles

    Spider-01-Introduction aux reptiles Python Les reptiles n'ont pas beaucoup de connaissances,Mais je dois continuer à travailler avec le Web.,Chaque page Web est différente,Il y a donc des exigences en matière de capacité variable Préparation des reptiles Références MaîtrisePythonCadre crawlerScrap ...

  2. PythonTutoriel crawler-00-C'est écrit devant

    Parce que beaucoup de gens veulent apprendrePythonCrawler,Il n'y a pas de tutoriel facile à apprendre,Je serai àCSDNPartager avec tout le mondePythonNotes d'étude des reptiles,Mises à jour occasionnelles Exigences de base Python Connaissances de base Python Les bases de,Tout le monde peut aller au tutoriel débutant ...

  3. Python Solutions aux problèmes courants de programmation crawler

    Python Solutions aux problèmes courants de programmation crawler : 1.Solutions communes: [Tiens bon.Ctrl La clé n'est pas lâche ],Cliquez simultanément sur[Nom de la méthode],Voir le document 2.TypeError: POST data should be bytes ...

  4. pythonCrawler——AvecseleniumPour accéder aux informations sur les produits JD

    1. Joignez d'abord le diagramme d'effet ( J'ai juste rampé 4(En milliers de dollars des États - Unis))  2. Site Web de JD https://www.jd.com/ 3. Je ne charge pas d'images ici , Accélérer la vitesse de montée ,Peut également être utiliséHeadless Pas de mode pop - up options = webdri ...

  5. Dans mon nouveau livre,Essayez de raconter l'histoire des actionsPythonConnaissance de la visualisation des mégadonnées crawler

    Mon nouveau livre,<Basé sur l'analyse des données massives sur les stocksPythonDémarrer le combat réel>,Attendu le2019Publié par Tsinghua Press à la fin de l'année. Si vous êtes intéressé par l'analyse des mégadonnées,,J'ai encore envie d'étudier.Python,Ce livre est un bon choix.Du point de vue du système de connaissances,, ...

  6. Obtenir des données sur les stocks en temps réel,Gratuit!——PythonCrawlerSina StockSur le terrain

    Plus de détails,Bienvenue au public:Nombre de maisons techniques, Vous pouvez également ajouter un micro - signal personnel :sljsz01,Communiquer avec moi. Importance des données en temps réel sur les stocks Pour les quatre principaux actifs négociables:Stock.Contrats à terme.Options.Pour la monnaie numérique,Contrats à terme.Options.Monnaie numérique, Peut être livré à partir de ...

  7. python Le chemin de la croissance des reptiles (Un.): Saisir les données boursières de Securities Star

    L'accès aux données fait partie intégrante de l'analyse des données , Et le Web crawler est l'un des principaux canaux d'accès aux données .Compte tenu de ce qui précède,, J'ai ramassé PythonCette arme pointue, Ouvre la voie au crawler Web . La version utilisée dans cet article est python3.5, J'ai l'intention de saisir l'étoile des titres. ...

  8. pythonCrawler(Un.)_ Principe du crawler et saisie des données

    Ce chapitre commence par une introduction PythonPrincipes,Pour plus de détails, voir:PythonGuide d'apprentissage Pourquoi être un reptile Le célèbre révolutionnaire .Penseurs.Hommes politiques.Stratège. Ma Yun, le leader de la réforme sociale, était 2015 Année mentionnée par ITAller àDT,Qu'est - ce que ça veut dire?DT,DT ...

  9. PythonCrawler(Neuf)_ Données non structurées et données structurées

    Une étape importante du crawler est l'analyse de page et l'extraction de données .Pour plus de détails, voir:PythonGuide d'apprentissage Analyse de la page et extraction des données En fait, le crawler n'est que quatre étapes principales : Allez( Pour savoir dans quel domaine ou site vous recherchez ) Grimpe!( Tous les sites Web ...

  10. PythonCrawler:AvecBeautifulSoupEn coursNBAAccès aux données

    Les Crawlers filtrent principalement les informations inutiles dans les pages Web . Obtenir des informations pratiques sur les pages Web L'architecture générale du crawler est : Inpython Avant de ramper, vous devez avoir une certaine connaissance de la structure de la page . Comme l'étiquette de la page web , Connaissance de la langue des pages Web, etc ,Recommandé pourW3School: W3s ...

Recommandation aléatoire

  1. ls: Impossible d'accéder/usr/sbin/smartctl: Il n'y a ni fichier ni répertoire

    Environnement:RHEL6.5 + Oracle 11.2.0.4 RAC En installantRACHeure, Paquet manquant lors de l'inspection cvuqdisk-1.0.9-1,oracle Fournir une installation de réparation de script . Mais il y a eu une erreur dans l'exécution : [[email protected] ...

  2. jsCliquez sur le boutondivAfficher,Cliquez surdivOubodyEt boutons,divCacher

    var box = document.getElementById("box"); var btn = document.getElementById("btn" ...

  3. Recommander une bonne chose swoole,phpComme un tigre pour ajouter des ailes

    Swoole:PHPAsynchrone de la langue.Parallèle.Cadre de communication réseau haute performance,Utilisation pureCRédaction Linguistique,OffrePHPServeur multithreadé asynchrone pour la langue,AsynchroneTCP/UDPClient réseau,AsynchroneMySQL,Pool de connexion à la base de données,AsyncTask,File d'attente des messages ...

  4. UtiliserdrawRectQuel est l'impact?

    Pour dessiner,Cette méthode sera utiliséeintiWithRectQuand appeler. L'impact de cette approche est qu'il y a touch event Après ça ,Va redessiner, Beaucoup de ces boutons peuvent affecter l'efficacité . Tout ce qui suit sera appelé 1.Si dansUIViewInitialisation ...

  5. LCOV Comment filtreriostream Informations sur la couverture des fonctions du système égal

    Je suis en train decppunit testTravaux connexes,AvecgcovEtlcov Outils pour voir la couverture par ligne de code ,Sentiments personnelslcovC'est génial.,Ça a l'air très confortable., C'est bon de l'allumer aussi !~~ C'est tout. ,Comme question.: J'utiliselcovDe --remov ...

  6. PHP Super résumé des questions d'entrevue (PHPChinese web)

    PHP Questions de base pour l'entrevue 1.La différence entre guillemets doubles et simples Les guillemets doubles expliquent les variables,Les guillemets simples n'expliquent pas les variables Insérer des guillemets simples dans les guillemets doubles,S'il y a une variable dans une seule citation,Interprétation des variables Le nom de la variable en guillemets doubles doit être suivi d'un non - nombre .Lettres. Caractères spéciaux soulignés , ...

  7. Machines virtuelles etDockerEn quoi est - ce différent

    http://www.techug.com/post/comparing-virtual-machines-vs-docker-containers.html Presse du traducteur: Diverses technologies de machines virtuelles ouvrent l'ère de l'informatique en nuage ...

  8. cropper.js Implémenter l'aperçu de la culture d'image et convertir en base64Envoyer au serveur.

    Un. .Travaux préparatoires 1.Vous devez d'abord téléchargercropper,Utilisation normalenpm, Après avoir entré le chemin du projet, exécutez la commande suivante: : npm install cropper 2. cropperBasé surjquery, N'oubliez pas d'introduire jq,En même temps ...

  9. Impossible de trouver un ou plusieurs types requis pour compiler des expressions dynamiques . Il manque une paire Microsoft.CSharp.dll Et System.Core.dll Références?

    Conseils“ Impossible de trouver un ou plusieurs types requis pour compiler des expressions dynamiques . Il manque une paire Microsoft.CSharp.dll Et System.Core.dll Références? ”Erreur Solutions:   À introduireCOMObjet(misc ...

  10. Optimisation du tas d'écriture dijkstra

    \(dijkstra\) Optimisation du tas de l'algorithme ,La complexité temporelle est\(O(n+m)\log n\) Ajouter un tableau\(id[]\) Enregistrer la position d'un noeud dans le tas , Il est possible d'éviter les empilements répétés pour réduire les constantes Cette approche repose sur des piles manuscrites #incl ...


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved