2017-10-12 4 views
1

J'ai réussi à gratter la première page du site, mais lorsque j'ai essayé de gratter des pages mutiples, cela a fonctionné mais le résultat est totalement faux.Gratter plusieurs pages avec des boucles en Python

code:

import requests 
from bs4 import BeautifulSoup 
from urllib.parse import urljoin 
for num in range(1,15): 
    res = requests.get('http://www.abcde.com/Part?Page={num}&s=9&type=%8172653').text 
    soup = BeautifulSoup(res,"lxml") 
    for item in soup.select(".article-title"): 
     print(urljoin('http://www.abcde.com',item['href'])) 

Il a seulement changé un numéro dans l'URL de chaque page, par exemple,

http://www.abcde.com/Part?Page=1&s=9&type=%8172653 
http://www.abcde.com/Part?Page=2&s=9&type=%8172653 

Je suis arrivé 14 au total des pages de ce sujet.

Mon code a fonctionné, mais il imprime à plusieurs reprises l'URL de la première page 14 fois. Le résultat que je m'attendais à imprimer toutes les différentes URL de différentes pages en utilisant des boucles.

+3

Vous ne formatez pas réellement la chaîne pour remplacer le nombre dedans ... Donc vous devez soit préfixer la chaîne avec 'f' si vous utilisez 3.6+ ou autrement' .format (num = num) ' la chaîne pour mettre le numéro de page dans ... –

Répondre

2

Comme Jon Clements a, url format comme ci-dessous:

res = requests.get('http://www.abcde.com/Part?Page={}&s=9&type=%8172653'.format(num)).text 

Vous pouvez trouver plus sur les chaînes de format de python à pyformat.info.

+0

Hi! Merci pour l'info. J'ai essayé, mais il a dit AttributeError: l'objet 'Response' n'a pas d'attribut 'format' – Makiyo

+0

Désolé ma mauvaise. Manqué un support rond enfin. Mise à jour le code –

+0

@Makiyo - Ça marche pour vous? –