【问题标题】:How to put two separate for loop data into CSV file如何将两个单独的 for 循环数据放入 CSV 文件
【发布时间】:2017-04-06 05:30:35
【问题描述】:

如何将两个单独的for loop 数据放入 CSV 文件中。第一列名称是link,第二列名称是mobile_name

预期输出:result.csv

link,mobile_name
https://www.flipkart.com/moto-g5-plus-fine-gold-32-gb/p/itmes2zjvwfncxxr?pid=MOBEQHMGED7F9CZ2&srno=b_1_1&otracker=browse
&lid=LSTMOBEQHMGED7F9CZ2KHTBI8,Moto G5 Plus (Fine Gold, 32 GB)

代码:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
import time

chrome_path = r"C:\Users\Venkatesh\AppData\Local\Programs\Python\Python35\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
#driver.get("https://www.flipkart.com/mobiles")
driver.get("https://www.flipkart.com/mobiles")

search = driver.find_element_by_xpath("""//*[@id="container"]/div/div[2]/div/div[2]/div/div/div[1]/section/div[3]/div/div/a""").click()
delay = 90 # seconds
try:
    #posts = WebDriverWait(driver, delay).until(EC.presence_of_element_located(driver.find_elements_by_class_name("iUmrbN")))
    #posts = WebDriverWait(driver, delay).until(EC.presence_of_element_located(By.XPATH, "//*[@id='container']/div/div[2]/div/div[2]/div/div/div[1]/a/div[2]"))
    #posts = driver.find_elements_by_class_name("iUmrbN")
    #posts = WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.XPATH, "//*[@id='container']/div/div[2]/div/div[2]/div/div/div[1]/a/div[2]")))
    WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.XPATH, "//*[@id='container']/div/div[2]/div[2]/div/div[2]/div/div[3]/div[1]/div/div[1]/a/div[2]/div[1]/div[1]")))
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    print("Page is ready")
except TimeoutException:
    print("Loading took too much time")
#print(driver.find_elements_by_class_name("_1UoZlX").get_attribute("href"))
time.sleep(10)
for post in driver.find_elements_by_class_name("_1UoZlX"):
    link = post.get_attribute("href")
    print(link)
for post1 in driver.find_elements_by_class_name("_3wU53n"):
    mobile_name = post1.text
    print(mobile_name)

修改代码:working fine

link = []
mobile_name = []
courses_list=[]
for post in driver.find_elements_by_class_name("_1UoZlX"):
    link += [ post.get_attribute("href") ]
for post1 in driver.find_elements_by_class_name("_3wU53n"):
    mobile_name += [ post1.text ] 

link_mobile_name = []
for i in range(len(link)) : 
    link_mobile_name = [ link[i], mobile_name[i] ]
    print(courses_list.append(link_mobile_name))
time.sleep(2)
driver.quit()

with open ('result.csv','w', newline='') as file:
    writer=csv.writer(file)
    writer.writerow(['product_link'])
    for row in courses_list:
        writer.writerow(row)

【问题讨论】:

  • 如果第一个列表中的项目与第二个列表中的项目匹配,您可以加入它们。
  • 内容会有所不同。我们如何加入一个是链接另一个是文本?上面只有两个循环功能,那时它会超过 5 个,这会很复杂吗?你能帮我看看有什么更好的方法吗?
  • 我不是指数据类型,我指的是它们之间的关系,例如:link[0]mobile_name[0] 指的是同一件事。如果是这样,您可以创建第三个列表,例如:[ [ link[0], mobile_name[0] ], [ link[1], mobile_name[1] ], etc ] 并使用它。
  • 是的,我想像这样。请您提供示例代码给我。

标签: python csv for-loop


【解决方案1】:

代码如下:

link = []
mobile_name = []
for post in driver.find_elements_by_class_name("_1UoZlX"):
    link += [ post.get_attribute("href") ]
for post1 in driver.find_elements_by_class_name("_3wU53n"):
    mobile_name += [ post1.text ] 

link_mobile_name = []
for i in range(len(link)) : 
    link_mobile_name += [ [ link[i], mobile_name[i] ] ]

注意:我假设linkmobile_name 的长度相同。

【讨论】:

  • 将上述列表放入 csv 文件。它正在逐列中显示一组数据,并在多行中显示相同的数据。
  • 我添加了修改后的代码。请检查一下。它工作正常。非常感谢您的帮助
  • 我很高兴能帮上忙。
猜你喜欢
  • 2021-09-03
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
  • 2020-05-28
  • 2018-01-21
  • 2020-08-08
  • 1970-01-01
  • 2021-12-20
相关资源
最近更新 更多