2017-10-12 2 views
1

Ich kratzte erfolgreich die erste Seite der Website, aber wenn ich versuchte, mehrere Seiten zu kratzen, funktionierte es, aber das Ergebnis ist völlig falsch.Kratzen mehrere Seiten mit Loops in 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'])) 

Es änderte nur eine Nummer in jeder URL der Seite, zum Beispiel

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

ich insgesamt 14 Seiten dieser bekam.

Mein Code funktionierte, aber es druckt nur wiederholt die URL der ersten Seite für 14 Mal. Das Ergebnis, das ich erwartet hatte, war, alle verschiedenen URLs von verschiedenen Seiten mit Loops auszudrucken.

+3

Sie formatieren die Zeichenfolge tatsächlich nicht, um die Zahl darin zu ersetzen ... Sie müssen also entweder die Zeichenfolge mit "f" voranstellen, wenn Sie 3.6+ oder sonst '.format (num = num)' verwenden die Zeichenfolge, um die Seitenzahl in ... –

Antwort

2

Als Jon Clements zeigte, Format url wie folgt:

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

Sie können pyformat.info mehr über Python Formatstrings finden.

+0

Hi! Danke für die Information. Ich habe versucht, aber es sagte AttributeError: 'Antwort' Objekt hat kein Attribut 'Format' – Makiyo

+0

Sorry mein schlechtes. Endlich eine runde Klammer verpasst. Aktualisierte den Code –

+0

@Makiyo - Funktioniert es für Sie? –