TypeError:只能连接列表(不是“元组”)列表将当前网址添加到新列
我正在运行一个脚本,它获取当前的url并将其写入csv文件,但我得到了:
writer.writerow(row + (url1,))
TypeError: can only concatenate list (not "tuple") to list
因为这一行:对于数据中的行:在下面的代码中(不使用driver.current url时有效)
url1 = driver.current_url
with open('test.csv', 'a', newline='', encoding="utf-8") as outfile:
writer = csv.writer(outfile)
for row in data:
writer.writerow(row + (url1,))
如果我添加:
for row in zip(data):
这会将所有数据放在一列中,并在第2列中链接,因为我希望每个数据位于不同的列中。
我明白了:
col1 col2
['Clyde', 'Annan', '2.65', 'https://www.linkhere.com']
所需:
col1 col2 col3 col4
Clyde Annan 2.65 https://www.linkhere.com
我知道如何解决这个问题吗?
代码:
import csv
import os
import time
from random import shuffle
from selenium import webdriver
from selenium.common.exceptions import TimeoutException, NoSuchElementException
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wait
driver = webdriver.Chrome()
driver.set_window_size(1024, 600)
driver.maximize_window()
driver.get('https://www.betstar.com.au/sports/soccer/44317884-football-scotland-ladbrokes-league-2/')
# XPaths for the data
groups = "//*[@class='fullbox']"
xp_bp1 = ".//*[@class='row'][1]//td[1]"
xp_ba1 = ".//*[@class='row'][2]//td[1]"
xp_bp3 = ".//*[@class='row'][1]//span"
while True:
try:
# wait for the data to populate the tables
#wait(driver, 5).until(EC.element_to_be_clickable((By.XPATH, (xp_bp1))))
time.sleep(2)
data = []
for elem in driver.find_elements_by_xpath(groups):
try:
bp1 = elem.find_element_by_xpath(xp_bp1).text
except:
bp1 = None
try:
ba1 = elem.find_element_by_xpath(xp_ba1).text
except:
ba1 = None
try:
bp3 = elem.find_element_by_xpath(xp_bp3).text
except:
bp3 = None
url1 = driver.current_url
data.append([bp1, ba1, bp3, url1])
print(data)
url1 = driver.current_url
with open('test.csv', 'a', newline='', encoding="utf-8") as outfile:
writer = csv.writer(outfile)
for row in data:
writer.writerow(row + (url1,))
except TimeoutException as ex:
pass
except NoSuchElementException as ex:
print(ex)
break
答案 0 :(得分:1)
(url1,)
它会创建一个元组并导致问题,从而解决问题
替换
with open('test.csv', 'a', newline='', encoding="utf-8") as outfile:
writer = csv.writer(outfile)
for row in data:
writer.writerow(row + (url1,))
使用以下代码:
(也不需要+ (url1,)
,因为它已经附加到数据data.append([bp1, ba1, bp3, url1])
)
with open('test.csv', 'a', newline='', encoding="utf-8") as outfile:
writer = csv.writer(outfile)
for row in data:
writer.writerow("\t".join(row))
答案 1 :(得分:1)
你有data.append([bp1, ba1, bp3, url1])
,这意味着什么时候
for row in data:
writer.writerow(row + (url1,))
row
已包含url1
。您希望4个数据元素出现在csv中,因此请将代码更改为:
for row in data:
writer.writerow(row)