Проблемы со структурой цикла Web Scraping - PullRequest
0 голосов
/ 12 июня 2018

В настоящее время я пишу код для веб-скрапа из AutoTrader в качестве учебного проекта.У меня проблемы с печатью нужных мне результатов.

Требуемый вывод должен быть:

Car 1
Specs Car 1

Вместо этого это

Car 1
Specs Car 1
Specs Car 2
Specs Car X

car 2

Где в моей циклической структуре яЯ ошибаюсь?

from bs4 import BeautifulSoup 
import requests

page_link = ("https://www.autotrader.co.uk/car-search?sort=price-asc&radius=1500&postcode=lu15jq&onesearchad=Used&onesearchad=Nearly%20New&onesearchad=New&make=AUDI&model=A5&price-to=8500&year-from=2008&maximum-mileage=90000&transmission=Automatic&exclude-writeoff-categories=on")
LN = 0
r = requests.get(page_link)
c = r.content
soup = BeautifulSoup(c,"html.parser")

all = soup.find_all("h2",{"class":"listing-title title-wrap"})
all2 = soup.find_all('ul',{"class" :'listing-key-specs '})

С вышеуказанным блоком кода все в порядке.Приведенный ниже блок печатает выходные данные.

LN = -1
ListTotal = len(all)
for item in all:
    if LN <= ListTotal:
        LN += 1
        print(item.find("a", {"class": "js-click-handler listing-fpa-link"}).text)
        for carspecs in all2:
            print (carspecs.text)
    else:
        break

Спасибо

1 Ответ

0 голосов
/ 12 июня 2018

Поскольку вы печатаете каждые carspec in all2 каждый раз

all = ...
all2 = ...

for item in all:
    ...
    for carspecs in all2:  
            # will print everything in all2 on each iteration of all
            print (carspecs.text)

Я подозреваю, что вы хотите

for item, specs in zip(all, all2):
    ...
    print(specs.text)

Просто к вашему сведению, я очистил ваш код с лучшей логикой иимен, избавился от лишних вещей и заставил их повиноваться руководству по питону

import requests
from bs4 import BeautifulSoup

page_link = ("https://www.autotrader.co.uk/car-search?sort=price-asc&"
             "radius=1500&postcode=lu15jq&onesearchad=Used&"
             "onesearchad=Nearly%20New&onesearchad=New&make=AUDI&model=A5"
             "&price-to=8500&year-from=2008&maximum-mileage=90000"
             "&transmission=Automatic&exclude-writeoff-categories=on")

request = requests.get(page_link)
conn = request.content
soup = BeautifulSoup(conn, "html.parser")

# don't overload the inbuilt `all`
cars = soup.find_all("h2", {"class":"listing-title title-wrap"})
cars_specs = soup.find_all('ul', {"class" :'listing-key-specs '})

for car, specs in zip(cars, cars_specs):
    # your logic with regards to the `LN` variable did absolutely nothing
    print(car.find("a", {"class": "js-click-handler listing-fpa-link"}))
    print(specs.text)
...