2016-10-18 6 views
0

Ich versuche, Arbeitsblätter für dieses Training herunterzuladen, alle Trainingseinheiten sind an verschiedenen Tagen aufgeteilt. Alles, was getan werden muss, ist eine neue Nummer am Ende des Links hinzuzufügen. Hier ist mein Code.Iterieren durch die Liste beim Parsen

import urllib 
 
import urllib.request 
 
from bs4 import BeautifulSoup 
 
import re 
 
import os 
 
theurl = "http://www.muscleandfitness.com/workouts/workout-routines/gain-10-pounds-muscle-4-weeks-1?day=" 
 
urls = [] 
 
count = 1 
 
while count <29: 
 
    urls.append(theurl + str(count)) 
 
    count +=1 
 
print(urls) 
 
for url in urls: 
 
    thepage = urllib 
 
    thepage = urllib.request.urlopen(urls) 
 
    soup = BeautifulSoup(thepage,"html.parser") 
 
    init_data = open('/Users/paribaker/Desktop/scrapping/workout/4weekdata.txt', 'a') 
 
    workout = [] 
 

 
    for data_all in soup.findAll('div',{'class':"b-workout-program-day-exercises"}): 
 
     try: 
 
      for item in data_all.findAll('div',{'class':"b-workout-part--item"}): 
 
       for desc in item.findAll('div', {'class':"b-workout-part--description"}): 
 
        workout.append(desc.find('h4',{'class':"b-workout-part--exercise-count"}).text.strip("\n") +",\t") 
 
        workout.append(desc.find('strong',{'class':"b-workout-part--promo-title"}).text +",\t") 
 
        workout.append(desc.find('span',{'class':"b-workout-part--equipment"}).text +",\t") 
 
       for instr in item.findAll('div', {'class':"b-workout-part--instructions"}): 
 
        workout.append(instr.find('div',{'class':"b-workout-part--instructions--item workouts-sets"}).text.strip("\n") +",\t") 
 
        workout.append(instr.find('div',{'class':"b-workout-part--instructions--item workouts-reps"}).text.strip("\n") +",\t") 
 
        workout.append(instr.find('div',{'class':"b-workout-part--instructions--item workouts-rest"}).text.strip("\n")) 
 
        workout.append("\n*3") 
 
     except AttributeError: 
 
      pass 
 

 
init_data.write("".join(map(lambda x:str(x), workout))) 
 
init_data.close

Das Problem ist, dass die Server-mal aus, ich gehe davon aus es ist nicht richtig durch die Liste iterieren oder das Hinzufügen von Zeichen ich den Server-Parser nicht brauchen und abstürzt. Ich habe auch versucht, ein anderes Skript zu schreiben, das den ganzen Link ergreift und sie in ein Textdokument legt, dann öffne den Text in diesem Skript und wiederhole den Text, aber das gab mir auch den gleichen Fehler. Was sind deine Gedanken?

Antwort

0

Es ist ein Tippfehler hier:

thepage = urllib.request.urlopen(urls) 

Sie wollten wahrscheinlich:

thepage = urllib.request.urlopen(url) 

Andernfalls Sie eine Reihe von URLs zu öffnen versuchen, anstatt einem einzelnen.

+0

So verwende ich absichtlich URLs - URLs ist eine neue Liste, die ich mit theurl + Count in Zeile 7 erstellt habe. –

+0

Oh! Ja ich sehe, lass es mich versuchen. –

+0

Perfekt, das hat wunderbar funktioniert, danke für die extra Augen! –

Verwandte Themen