Скрипт просто читает один элемент названия продукта и цены, но не читает и не записывает все элементы.пожалуйста, просмотрите - PullRequest
0 голосов
/ 10 мая 2018

Что-то не так с моими операторами цикла или я ошибся тегом? но когда я проверяю len (контейнеры), это дает мне 20, что означает, что я правильно понял тег, но когда я пытаюсь использовать селектор, как я использовал p.text и strong.text, хранящиеся в переменной, а затем записываю его в файл, который я получить только один элемент для product_name и один для цены. пожалуйста, обзор Вот мой сценарий:

    from urllib.request import urlopen as Ureq
from bs4 import BeautifulSoup as soup

my_url = 'https://laptopparts.ca/collections/types?q=Accessories'
Uclient = Ureq(my_url)
page_html = Uclient.read()
Uclient.close()

page_soup = soup(page_html, "html.parser")

containers = page_soup.findAll("div",{"class":"grid__item large--one-quarter medium-down--one-half"})

filename = "products.csv"

f = open(filename, "w")

headers = "Title, Price\n"  

f.write(headers)

for container in containers:

    title_container = container.findAll("p")
    product_name = title_container[0].text

    price_container = container.findAll("strong")
    price = price_container[0].text


print("product_name " + product_name)
print("price " + price)

f.write(product_name.replace(",","|") + "," + price + "\n")

f.close()

1 Ответ

0 голосов
/ 10 мая 2018

Попробуй.Приведенный ниже скрипт должен получить все названия предметов и цену и записать их в CSV-файл соответственно.Я пытался стряхнуть некоторые посторонние строки, из-за которых ваш сценарий выглядел ужасно.

import csv
from urllib.request import urlopen
from bs4 import BeautifulSoup

res = urlopen('https://laptopparts.ca/collections/types?q=Accessories').read()
soup = BeautifulSoup(res, "html.parser")

with open("output.csv","w",newline="") as infile:
    writer = csv.writer(infile)
    writer.writerow(['Title','Price'])

    for container in soup.find_all("div",{"class":"large--one-quarter"}):
        title = container.find("p").text
        price = container.find("strong").text
        print(title,price)
        writer.writerow([title,price])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...