【问题标题】:How to create two columns in an csv file from an for loop in python?如何从python中的for循环在csv文件中创建两列?
【发布时间】:2021-10-29 12:17:23
【问题描述】:
import json
from io import StringIO
from bs4 import BeautifulSoup
from requests_html import HTMLSession
import time
from selenium import webdriver
import requests
import pandas as pd
import numpy as np
from selenium.webdriver.chrome.options import Options
import colorama
from colorama import Fore, Back, Style
colorama.init(autoreset = False)
import selenium
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains

PATH = "C:\Program Files (x86)\chromedriver.exe"
chrome_options = Options()
chrome_options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = webdriver.Chrome(PATH, options = chrome_options)
driver.minimize_window()

for b in range(500):

    driver.implicitly_wait(10)
    url = "https://www.healthgrades.com/usearch?what=Marriage%20%26%20Family%20Therapy&entityCode=PS303&where=CA&pageNum={}&sort.provider=bestmatch&state=CA".format(b+104)
    driver.get(url)
    time.sleep(10)
    length = len(driver.find_elements_by_xpath("//a[@data-qa-target='provider-details-provider-name']"))
    for i in range(length):
        elements = driver.find_elements_by_xpath("//a[@data-qa-target='provider-details-provider-name']")
        elements[i].click()
        handles = driver.window_handles
        driver.switch_to.window(handles[1])
        time.sleep(1)
        print(driver.find_element_by_tag_name("h1").get_attribute("innerText"))
        print(driver.find_element_by_xpath("//div[@class='summary-standard-button-row-mobile']/a").get_attribute("innerText"))
        driver.close()
        driver.switch_to.window(handles[0])
        time.sleep(1)

这段代码的输出是这样的:

Full Name
Phone Number

有没有办法让我可以在 CSV 文件的不同列中导入姓名和电话号码?

我尝试了很多方法,但遗憾的是它们都不起作用,因为 for 循环会重写我在 CSV 文件中的行。

【问题讨论】:

  • “在 CSV 文件中重写我的索引”是什么意思? CSV 文件没有索引,它们只是具有固定列数的文本文件和任意数量的行。简而言之,您使用 with open(filename, 'w') as file: writer = csv.writer(file); for row in whatever: writer.writerow(whatever[0], whatever[1]) 编写一个 CSV 文件
  • 我的意思是行对不起
  • 那么"rewrites my rows"是什么意思呢?只需在开始时打开一次,然后写入与记录一样多的行。听起来好像您在每次迭代时都打开了一个新文件,覆盖了旧文件;但是您向我们展示了一段不相关的代码,而不是您遇到问题的代码。
  • 请在提问时查看包含minimal reproducible example 的指南。我们不需要查看您的工作代码,我们需要查看您遇到问题的部分;不相关、分散注意力的代码越少,有人阅读和回答的可能性就越大(对于初学者问题,我们越有可能将您指向现有的重复代码,理想情况下该代码也不包含任何不相关的内容)。
  • 切线地,一个这样的分心:PATH = "C:\Program Files (x86)\chromedriver.exe" 是现代 Python 的语法错误;你想要PATH = r"C:\Program Files (x86)\chromedriver.exe" 或加倍反斜杠,或用正斜杠替换它们。

标签: python selenium csv for-loop


【解决方案1】:

类似的东西。

import csv

# ...

with open('phone.csv' 'w') as file:
    writer = csv.writer(file)
    for b in range(500):
        # ...
        for i in range(length):
            # ...
            name = driver.find_element_by_tag_name("h1").get_attribute("innerText")
            phone = driver.find_element_by_xpath("//div[@class='summary-standard-button-row-mobile']/a").get_attribute("innerText")
            writer.writerow([name, phone])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-16
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2021-11-27
    • 1970-01-01
    • 2017-06-15
    相关资源
    最近更新 更多