#python #python-3.x #selenium-webdriver #web-scraping #web-scraping-language
#python #python-3.x #селен #selenium-webdriver
Вопрос:
Я пытаюсь очистить страницу и содержащиеся в ней данные, но не могу получить ожидаемые данные в одной строке из-за тегов br, присутствующих в тексте, из-за которых данные перемещаются на новую строку, любая помощь будет оценена.
Ниже приведен мой код:
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import time
import random
import re
driver = webdriver.Chrome(r"C:UsersAcerAppDataLocalProgramsPythonPython36-32chromedriver.exe")
with open(r"E:officeZoroZoro11.txt" ,'r')as f:
content = f.readlines()
content = [x.strip() for x in content]
currentIndex = 0
with open(r"E:officeZoroZoro16.csv", 'a')as f1:
f1.write("Product Url" "," "Main category" "," "Sub category" "," "Leaf category" "," "Title" "," "Prodcutid" "," "Manufacturer Name" "," "Manufacturer's number" "," "reviews" "," "Price" "," "smalldesc" "," "Product Dimensions" "," "Main Image" "," "Sub Image")
f1.write("n")
for link in content[currentIndex:]:
driver.get(link)
time.sleep(5)
aj = driver.find_element_by_class_name('zcl-breadcrumb__list').text.replace("Homen","").replace("n",">").replace(",","")
try:
title = driver.find_element_by_xpath("//*[@data-za='product-name']").text.replace(",","").replace("n","")
except:
title = "No title"
try:
brand = driver.find_element_by_xpath("//*[@data-za='product-brand-name']").text.replace(",","")
except:
brand = "No Brand"
try:
productid = driver.find_element_by_xpath("//*[@data-za='PDPZoroNo']").text.replace(",", "")
except:
productid = "No productid"
maincategory = aj[:aj.find(">")]
Leafcategory = aj[aj.rindex('>') 1:]
Subcategory = aj[(aj.find(">")) 1:aj.rindex('>')]
mfrnu = driver.find_element_by_xpath("//*[@data-za='PDPMfrNo']").text.replace(",", "")
try:
mainimage = driver.find_element_by_xpath('//*[@id="app"]/div[3]/div[2]/div/div/main/div[1]/div[3]/div/div[1]/div/div/div/div/div/img').get_attribute('src')
except:
mainimage = "No mainimage"
try:
price = driver.find_element_by_class_name('product-price__price').text
except:
price = "No price"
try:
smalldesc = driver.find_element_by_class_name('product-attributes').text.replace("n",";").replace(",","")
except:
smalldesc = "No desc"
try:
specification = driver.find_element_by_css_selector('.product-specifications__table.table.table-striped').text.replace("n",";").replace(",","").strip()
print(specification)
except:
specification = "No sepcs"
try:
productdesc = driver.find_element_by_css_selector('.product-description__text').text.replace(",","")
except:
productdesc = "No productfields"
f1.write(link "," maincategory "," Subcategory "," Leafcategory "," title "," productid "," brand "," mfrnu "," price "," smalldesc "," specification "," productdesc "," mainimage "n")
в приведенном выше коде в productdesc я получаю следующий вывод
Pro Series Swivel Head LED Work Light
280 lumens
Beam Distance 54 meters
Run time 3 hrs
ожидаемый результат находится в одной строке с пробелом
ссылка, которую я использую для очистки, https://www.zoro.com/dorcy-pro-s-swivel-head-led-worklght-187-lumen-41-2392/i/G9576141 /
Комментарии:
1. Пожалуйста, предоставьте образцы данных из Zoro11.txt так что я могу протестировать. Спасибо.
2. @Mike67 образец данных из zoro11.txt является zoro.com/dorcy-pro-s-swivel-head-led-worklght-187-lumen-41-2392 /…
3. @Mike67 образец данных из zoro11.txt является zoro.com/dorcy-pro-s-swivel-head-led-worklght-187-lumen-41-2392 /…
Ответ №1:
Похоже, вам просто нужно обновить строку для чтения описания. Добавьте замену новой строки, как вы делали в других полях:
Измените это:
productdesc = driver.find_element_by_css_selector('.product-description__text').text.replace(",","")
К этому:
productdesc = driver.find_element_by_css_selector('.product-description__text').text.replace("n",";").replace(",","")