2017-10-15 13 views
1

J'ai un programme qui lit certaines URL depuis un fichier texte, obtient la source de la page avec requests.get, puis utilise beautifulsoup4 pour trouver des informations.requests.get retourne 400 mauvaises url quand on leur donne une variable contenant une URL, mais pas quand on leur donne une chaîne avec la même URL

f = open('inputfile.txt') 
session = requests.Session() 
session.headers.update({'User-Agent': 'Mozilla/5.0'}) 
for line in f: 
    x = 0 
    z = len(line) 
    r = session.get(line[x:z]) 
    soup = bs4.BeautifulSoup(r.text, "html.parser") 

Ceci renvoie une demande incorrecte HTTP 400 - URL non valide. Cependant, quand je fais la même chose sauf taper dehors l'URL comme chaîne, tout fonctionne (bien que j'aie seulement une URL).

f = open('inputfile.txt') 
session = requests.Session() 
session.headers.update({'User-Agent': 'Mozilla/5.0'}) 
for line in f: 
    r = session.get('http://www.ExactSameUrlAsEarlier.com') 
    soup = bs4.BeautifulSoup(r.text, "html.parser") 

Comment pourrais-je corriger/modifier cela me permet de faire défiler les différentes URL que j'ai dans le fichier? Juste pour clarifier, c'est ce que le inputfile.txt ressemble:

http://www.url1.com/something1 
http://www.url2.com/something2 

etc.

Merci à l'avance.

+0

s'il n'y a qu'une seule URL dans le ' 'inputfile.txt'' Est-ce qu'il vous donne encore un 400? Etes-vous également déconnecté 'line [x: z]', juste pour vous assurer que c'est une URL valide qui est retirée? –

+0

Oui, j'ai enregistré la sortie de 'line [x: z]', elle renvoie une adresse valide. Quand je copie l'url que 'line [x: z]' contient directement dans l'instruction 'requests.get()', cela fonctionne. Je n'ai pas essayé avec une seule URL dans le fichier d'entrée, je vais essayer de voir comment cela fonctionne –

Répondre

0

Vous devez effectuer une boucle sur les lignes du fichier et non sur le descripteur de fichier. Votre boucle doit être:

for line in f.readlines(): 
    url = line.strip() 

Il existe d'autres moyens de décapage des espaces de la ligne, un coup d'oeil à ce poste: Getting rid of \n when using .readlines()

+0

Great, cela a fonctionné. Mon problème semblait être qu'il y avait un "\ n" égaré à la fin de l'URL. Merci! –