2017-01-23 5 views
1

Ich versuche, eine Liste zu iterieren, um einige Links für die eine Website zu erhalten, die Unterkategorien mit mehreren Seiten hat. Der erste Link in der Unterkategorie hat die erste Nummer in der Liste (8), der zweite Link hat 6 und so weiter. Mein Ergebnis wie folgt aussehen wollen:Schleife Iteration von Liste

sublinks: 
0 https://messageboards.webmd.com/family-pregnancy/f/relationships/ 
1 https://messageboards.webmd.com/family-pregnancy/f/parenting/ 
2 https://messageboards.webmd.com/family-pregnancy/f/pets/ 
3 https://messageboards.webmd.com/family-pregnancy/f/pregnancy/ 

Liste, die für Schleife itarate in versuchen: [8, 6, 5, 13, 10, 16, 13, 15, 4, 4, 5, 7, 2, 6, 6, 8, 9, 8, 3, 8, 8, 1, 6, 3, 2, 15, 5, 4, 2, 12, 18, 5, 2]

import bs4 as bs 
import urllib.request 
import pandas as pd 
import urllib.parse 
import re 


#source = urllib.request.urlopen('https://messageboards.webmd.com/').read() 
source = urllib.request.urlopen('https://messageboards.webmd.com').read() 
soup = bs.BeautifulSoup(source,'lxml') 


df = pd.DataFrame(columns = ['link'],data=[url.a.get('href') for url in soup.find_all('div',class_="link")]) 
lists =[] 
lists2=[] 
lists3=[] 
page_links = [] 


for i in range(0,33): 
    link = (df.link.iloc[i]) 
    req = urllib.request.Request(link) 
    resp = urllib.request.urlopen(req) 
    respData = resp.read() 
    temp1=re.findall(r'Filter by</span>(.*?)data-pagedcontenturl',str(respData)) 
    temp1=re.findall(r'data-totalitems=(.*?)data-pagekey',str(temp1))[0] 
    pageunm=round(int(re.sub("[^0-9]","",temp1))/10) 
    lists.append(pageunm) 

for j in lists: 
    for x in range(1, j+1): 
     url_pages = link + '#pi157388622=' + str(j) 
     page_links.append(url_pages) 

My Endergebnis für die erste Iteration will wie folgt aussehen:

https://messageboards.webmd.com/family-pregnancy/f/relationships/#pi157388622=1 
https://messageboards.webmd.com/family-pregnancy/f/relationships/#pi157388622=2 
https://messageboards.webmd.com/family-pregnancy/f/relationships/#pi157388622=3 
https://messageboards.webmd.com/family-pregnancy/f/relationships/#pi157388622=4 
https://messageboards.webmd.com/family-pregnancy/f/relationships/#pi157388622=5 
https://messageboards.webmd.com/family-pregnancy/f/relationships/#pi157388622=6 
https://messageboards.webmd.com/family-pregnancy/f/relationships/#pi157388622=7 
https://messageboards.webmd.com/family-pregnancy/f/relationships/#pi157388622=8 
+3

Was ist Ihre Frage? Was funktioniert momentan nicht? Ihre Liste ("Liste, die versucht zu iterieren") hat verschiedene Zahlen (8, 6, 5, 14 ...) von Ihrem gewünschten ("möchte wie aussehen") Beispiel (1, 2, 3, 4 ...) . Was willst du? –

+0

Ich möchte eine for-Schleife machen, die im Bereich auf der Nummer in den Listen iteriert. zum Beispiel würde der erste im Bereich von 1-8 liegen. Die zweite würde den zweiten Link aus den Unterkategorien und Iterate von 1-6 bekommen. – Data1234

+0

Also, was ist deine Frage? Welcher Teil funktioniert nicht? Was macht es? Was soll es tun? – wwii

Antwort

0

Wenn Ihr Problem ist, dass Sie nicht die Iteration geht von 1 bis zur Nummer in der ersten Liste bekommen (außerhalb Codebeispiel), dann können Sie so etwas wie dies versuchen:

sub_links = [8, 6, 5, 13, 10, 16, 13, 15, 4, 4, 5, 7, 2, 6, 6, 8, 9, 8, 3, 8, 8, 1, 6, 3, 2, 15, 5, 4, 2, 12, 18, 5, 2] 
for length in sub_links: 
    for number in range(1, length + 1): 
     print(number, end=' ') 
    print() 

Das derzeit alle Zahlen druckt man in jeder Zeile werden soll. Passen Sie den inneren for-Schleifenkörper an, um die Nummer an Ihren Link anzuhängen, und Sie haben, wonach Sie suchen.

Wenn Ihre Frage etwas anderes ist, dann müssen Sie klarer sein - und ich schlage vor, dass Sie nur den Code einbeziehen, der nicht funktioniert, und erklären Sie, was das Problem ist.

+0

danke für die Hilfe. Ich werde das nächste Mal – Data1234