во-первых, вы не включаете заголовок там. ничего страшного, только в первой строке будет пустое место для вашего заголовка в столбце url
. Итак, чтобы включить это:
writer.writerow(["name", "type", "price", "priceCurrency", "availability", "url" ])
Во-вторых, вы сохраняете строку как url
, но затем ссылаетесь на URL
в своей записи. URL
не имеет значения. Фактически, это должно было дать ошибку URL is not defined
или что-то подобное.
И поскольку вы уже используете url
в своем коде с url = "https://www.daraz.pk/catalog/?q=dell&_keyori=ss&from=input&spm=a2a0e.searchlist.search.go.57446b5079XMO8"
, я бы, вероятно, также изменил имя переменной на что-то вроде url_text
.
Возможно, я бы также использовал переменную type_text
или что-то отличное от type
, так как type
является встроенной функцией в python.
Но вам нужно изменить на:
writer.writerow([name, type, price, currency, availability, url ])
outfile.close()
Полный код:
import requests
from bs4 import BeautifulSoup
import json
import csv
url = "https://www.daraz.pk/catalog/?q=dell&_keyori=ss&from=input&spm=a2a0e.searchlist.search.go.57446b5079XMO8"
page = requests.get(url)
print(page.status_code)
print(page.text)
soup = BeautifulSoup(page.text, 'html.parser')
print(soup.prettify())
alpha = soup.find_all('script',{'type':'application/ld+json'})
jsonObj = json.loads(alpha[1].text)
outfile = open('c:\products.csv','w', newline='')
writer = csv.writer(outfile)
writer.writerow(["name", "type", "price", "priceCurrency", "availability" , "url"])
for item in jsonObj['itemListElement']:
name = item['name']
type_text = item['@type']
url_text = item['url']
price = item['offers']['price']
currency = item['offers']['priceCurrency']
availability = item['offers']['availability'].split('/')[-1]
writer.writerow([name, type_text, price, currency, availability, url_text ])
outfile.close()