Python:从for循环中列出一个列表

时间:2018-08-03 11:42:59

标签: python python-3.x for-loop

我正在编码一个星期,现在感到迷失了,我试图从多个列表中逃脱到一个列表中,然后添加到CSV中。该程序正在对该网站进行抓取。第1部分创建链接并获取重定向链接,然后在第2部分中连接到站点并获取表。第3部分从HEADERS中提取单词(大约43个单词),并在所有单词的描述中查找,然后在单词左侧添加60个字符,在右侧添加60个字符。之所以处于循环中,是因为我需要从中获取大量房地产报价。希望你能理解。编码需要很多精力!

您可以在此处找到整个程序(编辑部分):https://stackoverflow.com/posts/comments/90155616?noredirect=1

代码如下:

for p in page_soup.select('section#description'):
            p = str(p)
            p = p.lower() 

            lista_k = []            

            for j in range(len(HEADERS3)): 
                #print('j:',j)
                # find_p znajduje wszystkie słowa kluczowe z HEADERS3 w paragrafie na stronie kontraktu.
                find_p = re.findall(HEADERS3[j],p)
                # listy, które wyświetlają pozycję startową poszczególnych słów muszą zaczynać się od '-' lub 0?,
                # ponieważ, gdy dane słowo nie zostanie odnalezione to listy będą puste w pierwszej iteracji pętli
                # co w konsekewncji doprowadzi do błędu out of range
                m_start = []
                m_end = []
                lista_j = []


                for m in re.finditer(HEADERS3[j], p):
                    #print((m.start(),m.end()), m.group())
                    m_start.append(m.start())
                    m_end.append(m.end())

                #print(h)

                for k in range(len(m_start)):
                    #właściwe teraz nie wiem po co to jest..
                    try:
                        x = m_start[k]
                        y = m_end[k]
                    except IndexError:
                        x = m_start[0]
                        y = m_end[0]
                    #print('xy:',x,y)
                    #print(find_p) 
                #print(HEADERS3[j])
                    z = (HEADERS3[j]+':',p[-60+x:y+60]+'    ++-NNN-++') 
                    lista_j.append(z)
                    #print(z)
                #print ('lista_j:',lista_j)
                lista_k.append(lista_j)
            print('lista_k:',lista_k)

输出为:

                ----------- 3 -----------
 http://www.kontrakt.szczecin.pl/mieszkanie-wynajem-46m2-2000pln-gorna-bezrzecze-szczecin-zachodniopomorskie,351353
['351353', '2', '2 000 PLN', '-', '46\xa0m2', '0', '2', 'Widna', '-', '-', 'Gazowe', 'Tak', 'Tak', 'Piec gazowy', '-', 'Cegła', '2007', 'Bardzo dobry', '-', '-', '-', 'Liczba tarasów: 2', '-', 'Ogród: Tak', '-', 'Garaż: Tak', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-']
lista_j: []
lista_j: []
lista_j: []
lista_j: [('gospodarcze:', 'arkingowe na samochód ,rower ale również jako pomieszczenie gospodarcze z półkami. cena najmu do negocjacji,warunkiem jednak koniec    ++-NBP-++')]
lista_j: []
lista_j: [('parking:', 'ie do garażu.przed garażem podjazd i ogólnodostępne miejsca parkingowe . w pobliżu wiele sklepów,między innymi dwa supermarkety    ++-NBP-++'), ('parking:', 'z śmieci i f. remontowy.garaż do wykorzystania jako miejsce parkingowe na samochód ,rower ale również jako pomieszczenie gospod    ++-NBP-++')]
lista_j: []
lista_j: [('garaż:', 'nie dwupokojowe usytuowane na parterze z tarasem ,ogrodem i garażem.budynek wybudowany w 2007r. na nowym kameralnym,bezpieczn    ++-NBP-++'), ('garaż:', 'ience piec dwuobiegowy typu vaillant .z ogrodu przejście do garażu.przed garażem podjazd i ogólnodostępne miejsca parkingowe     ++-NBP-++'), ('garaż:', 'uobiegowy typu vaillant .z ogrodu przejście do garażu.przed garażem podjazd i ogólnodostępne miejsca parkingowe . w pobliżu w    ++-NBP-++'), ('garaż:', ' 220zł w nim zaliczka na wodę , wywóz śmieci i f. remontowy.garaż do wykorzystania jako miejsce parkingowe na samochód ,rower    ++-NBP-++')]
lista_j: [('ogród:', 'in.salon z aneksem kuchennym ok 24mkw z wyjściem na taras i ogród.taras w częsci zadaszony z kącikiem z siedziskiem oraz ozdo    ++-NBP-++'), ('ogród:', 'kiem z siedziskiem oraz ozdobną pergolą w części otwarty na ogród z zadbanym trawnikiem oraz krzewami :porzeczką,borówką i ma    ++-NBP-++')]
lista_j: [('ogrod:', 'ne mieszkanie dwupokojowe usytuowane na parterze z tarasem ,ogrodem i garażem.budynek wybudowany w 2007r. na nowym kameralnym    ++-NBP-++'), ('ogrod:', 'umywalką i wc. w łazience piec dwuobiegowy typu vaillant .z ogrodu przejście do garażu.przed garażem podjazd i ogólnodostępne    ++-NBP-++')]
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: [('remon:', 'o zarządcy 220zł w nim zaliczka na wodę , wywóz śmieci i f. remontowy.garaż do wykorzystania jako miejsce parkingowe na samoc    ++-NBP-++')]
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: [('aneks:', 'miejskiej-szybki dojazd do centrum miasta ok.10 min.salon z aneksem kuchennym ok 24mkw z wyjściem na taras i ogród.taras w cz    ++-NBP-++'), ('aneks:', 'anym trawnikiem oraz krzewami :porzeczką,borówką i maliną.w aneksie kuchennym meble w zabudowie a w wyposażeniu: kuchenka gaz    ++-NBP-++')]
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: [('zabudow:', 'ami :porzeczką,borówką i maliną.w aneksie kuchennym meble w zabudowie a w wyposażeniu: kuchenka gazowa amica,z piekarnikiem ele    ++-NBP-++'), ('zabudow:', ' przeszklona ława.w drugim pokoju sypialni ok.15mkw:szafa w zabudowie typu komandor oraz duże łóżko i dwie szafki nocne.łazienk    ++-NBP-++')]
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_k: [[], [], [], [('gospodarcze:', 'arkingowe na samochód ,rower ale również jako pomieszczenie gospodarcze z półkami. cena najmu do negocjacji,warunkiem jednak koniec    ++-NBP-++')], [], [('parking:', 'ie do garażu.przed garażem podjazd i ogólnodostępne miejsca parkingowe . w pobliżu wiele sklepów,między innymi dwa supermarkety    ++-NBP-++'), ('parking:', 'z śmieci i f. remontowy.garaż do wykorzystania jako miejsce parkingowe na samochód ,rower ale również jako pomieszczenie gospod    ++-NBP-++')], [], [('garaż:', 'nie dwupokojowe usytuowane na parterze z tarasem ,ogrodem i garażem.budynek wybudowany w 2007r. na nowym kameralnym,bezpieczn    ++-NBP-++'), ('garaż:', 'ience piec dwuobiegowy typu vaillant .z ogrodu przejście do garażu.przed garażem podjazd i ogólnodostępne miejsca parkingowe     ++-NBP-++'), ('garaż:', 'uobiegowy typu vaillant .z ogrodu przejście do garażu.przed garażem podjazd i ogólnodostępne miejsca parkingowe . w pobliżu w    ++-NBP-++'), ('garaż:', ' 220zł w nim zaliczka na wodę , wywóz śmieci i f. remontowy.garaż do wykorzystania jako miejsce parkingowe na samochód ,rower    ++-NBP-++')], [('ogród:', 'in.salon z aneksem kuchennym ok 24mkw z wyjściem na taras i ogród.taras w częsci zadaszony z kącikiem z siedziskiem oraz ozdo    ++-NBP-++'), ('ogród:', 'kiem z siedziskiem oraz ozdobną pergolą w części otwarty na ogród z zadbanym trawnikiem oraz krzewami :porzeczką,borówką i ma    ++-NBP-++')], [('ogrod:', 'ne mieszkanie dwupokojowe usytuowane na parterze z tarasem ,ogrodem i garażem.budynek wybudowany w 2007r. na nowym kameralnym    ++-NBP-++'), ('ogrod:', 'umywalką i wc. w łazience piec dwuobiegowy typu vaillant .z ogrodu przejście do garażu.przed garażem podjazd i ogólnodostępne    ++-NBP-++')], [], [], [], [], [], [], [('remon:', 'o zarządcy 220zł w nim zaliczka na wodę , wywóz śmieci i f. remontowy.garaż do wykorzystania jako miejsce parkingowe na samoc    ++-NBP-++')], [], [], [], [], [], [], [], [], [], [], [], [], [('aneks:', 'miejskiej-szybki dojazd do centrum miasta ok.10 min.salon z aneksem kuchennym ok 24mkw z wyjściem na taras i ogród.taras w cz    ++-NBP-++'), ('aneks:', 'anym trawnikiem oraz krzewami :porzeczką,borówką i maliną.w aneksie kuchennym meble w zabudowie a w wyposażeniu: kuchenka gaz    ++-NBP-++')], [], [], [], [], [], [('zabudow:', 'ami :porzeczką,borówką i maliną.w aneksie kuchennym meble w zabudowie a w wyposażeniu: kuchenka gazowa amica,z piekarnikiem ele    ++-NBP-++'), ('zabudow:', ' przeszklona ława.w drugim pokoju sypialni ok.15mkw:szafa w zabudowie typu komandor oraz duże łóżko i dwie szafki nocne.łazienk    ++-NBP-++')], [], [], [], [], [], [], [], []]
[] 

输出(IMG):https://i.stack.imgur.com/M5qQi.png

1 个答案:

答案 0 :(得分:0)

问题在于,在循环的每次迭代过程中,您一次又一次地初始化lista_j。您需要将其移出循环。

未经测试,但应该可以工作:

for p in page_soup.select('section#description'):
            p = str(p)
            p = p.lower() 

            lista_k = []  
            lista_j = []

            for j in range(len(HEADERS3)): 
                #print('j:',j)
                # find_p znajduje wszystkie słowa kluczowe z HEADERS3 w paragrafie na stronie kontraktu.
                find_p = re.findall(HEADERS3[j],p)
                # listy, które wyświetlają pozycję startową poszczególnych słów muszą zaczynać się od '-' lub 0?,
                # ponieważ, gdy dane słowo nie zostanie odnalezione to listy będą puste w pierwszej iteracji pętli
                # co w konsekewncji doprowadzi do błędu out of range
                m_start = []
                m_end = []



                for m in re.finditer(HEADERS3[j], p):
                    #print((m.start(),m.end()), m.group())
                    m_start.append(m.start())
                    m_end.append(m.end())

                #print(h)

                for k in range(len(m_start)):
                    #właściwe teraz nie wiem po co to jest..
                    try:
                        x = m_start[k]
                        y = m_end[k]
                    except IndexError:
                        x = m_start[0]
                        y = m_end[0]
                    #print('xy:',x,y)
                    #print(find_p) 
                #print(HEADERS3[j])
                    z = (HEADERS3[j]+':',p[-60+x:y+60]+'    ++-NNN-++') 
                    lista_j.append(z)
                    #print(z)
                #print ('lista_j:',lista_j)
                lista_k.append(lista_j)
            print('lista_k:',lista_k)

或者甚至在第一个for循环之外,具体取决于您的情况:

lista_k = []
lista_j = []
for p in page_soup.select('section#description'):
            p = str(p)
            p = p.lower() 

            for j in range(len(HEADERS3)): 
                #print('j:',j)
                # find_p znajduje wszystkie słowa kluczowe z HEADERS3 w paragrafie na stronie kontraktu.
                find_p = re.findall(HEADERS3[j],p)
                # listy, które wyświetlają pozycję startową poszczególnych słów muszą zaczynać się od '-' lub 0?,
                # ponieważ, gdy dane słowo nie zostanie odnalezione to listy będą puste w pierwszej iteracji pętli
                # co w konsekewncji doprowadzi do błędu out of range
                m_start = []
                m_end = []



                for m in re.finditer(HEADERS3[j], p):
                    #print((m.start(),m.end()), m.group())
                    m_start.append(m.start())
                    m_end.append(m.end())

                #print(h)

                for k in range(len(m_start)):
                    #właściwe teraz nie wiem po co to jest..
                    try:
                        x = m_start[k]
                        y = m_end[k]
                    except IndexError:
                        x = m_start[0]
                        y = m_end[0]
                    #print('xy:',x,y)
                    #print(find_p) 
                #print(HEADERS3[j])
                    z = (HEADERS3[j]+':',p[-60+x:y+60]+'    ++-NNN-++') 
                    lista_j.append(z)
                    #print(z)
                #print ('lista_j:',lista_j)
                lista_k.append(lista_j)
            print('lista_k:',lista_k)