只想在第二个/内部 for 循环上使用 join 命令,让所有作者都在一个单元格中

Want to use join command only on second / inner for loop to have all authors in one cell

New Output I want

New Code for fetching authors role

Old, Output I wanted

我想在一个单元格中包含作者列表,为此我正在使用 .join() 命令。

稍微了解一下我的代码和我想要完成的工作:

主要 link 是一个包含 20 个项目的列表,每个项目都有一个包含 4-5 位作者的列表。首先,我想遍历 links,然后遍历它的每个项目,以获取 csv 的一个单元格中的作者列表。

这对我来说是噩梦。我花了几天时间找出答案,希望有人能帮助和理解这个问题。求详细资料,谢谢。输出附在下面:

from selenium import webdriver
import pandas as pd    
driver = webdriver.Chrome()    
site = 'https://www.goodreads.com/search?q=chughtai&qid=WzdWh5nG8z'

driver.get(site)
driver.maximize_window()
authors = []
auth = []


main = driver.find_elements_by_tag_name('tr')
for i in main:
    con = i.find_elements_by_xpath('.//div[@class="authorName__container"]')
    for n in con:
        authors.append(n.find_element_by_xpath('.//a[@class="authorName"]/span').text)
        one_cell = ', '.join(authors)
    auth.append(one_cell)

a = {'Author Names': one_cell}
df = pd.DataFrame.from_dict(a, orient='index')
df = df.transpose()
df.to_csv("only_names.csv", index=False)
print(df)

您的问题似乎是作者列表在您解析新项目之前没有重置为空。重置它的一种方法是将 authors = [] 从当前位置移动到 for i in main: 之后的行。然后您将获得每个项目的新的空列表。

另一个 non-critical,建议是让您的 one_cell = ', '.join(authors) 脱离当前的内部循环,但仍在 auth.append(one_cell) 之前。您只需要为每个 i.

执行一次这两行

更新:

展示我的第二个建议:

for i in main:
    authors = []
    con = i.find_elements_by_xpath('.//div[@class="authorName__container"]')
    for n in con:
        authors.append(n.find_element_by_xpath('.//a[@class="authorName"]/span').text)
    one_cell = ', '.join(authors)
    auth.append(one_cell)