2017-01-23 4 views
1

Я пытаюсь выполнить итерацию списка, чтобы получить некоторые ссылки на веб-сайт, на котором есть подкатегории с несколькими страницами. Первая ссылка в подкатегории имеет первое число в списке (8), второе - 6 и так далее. Мой конечный результат хочет выглядеть следующим образом:Итерация цикла из списка

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/ 

список, которые пытаются itarate в течение цикла: [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) 

Мои конечный результат для первой итерации хочет выглядеть следующим образом:

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

Что вы хотите сказать? Что сейчас не работает? Ваш список («список, который пытается выполнить итерацию») имеет разные цифры (8, 6, 5, 14 ...) из вашего желаемого (например, «хотите выглядеть») (1, 2, 3, 4 ...) , Что ты хочешь? –

+0

Я хочу сделать цикл for, который повторяется в диапазоне от числа в списках. например, первый будет находиться в диапазоне от 1 до 8. Второй получит второе звено из подкатегорий и итерацию от 1-6 – Data1234

+0

Итак, в чем ваш вопрос? Какая часть не работает? Что он делает? Что он должен делать? – wwii

ответ

0

Если ваша проблема в том, что вы не можете получить итерации, идущие от 1 до количества в исходном списке (за пределами вашего образец кода), то вы можете попробовать что-то вроде этого:

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() 

Это в настоящее время печатает все номера, которые вы хотите в каждой строке. Отрегулируйте внутреннее тело цикла, чтобы добавить номер в вашу ссылку, и у вас есть то, что вам нужно.

Если ваш вопрос о чем-то другом, то вам нужно быть более четким - и я предлагаю вам включить только код, который не работает, и объяснить, в чем проблема.

+0

Благодарю вас за помощь. Я в следующий раз – Data1234

Смежные вопросы