问题描述
背景:
我有以下代码,这些代码使用Selenium从该Simply Recipe Index URL查找链接列表并将其存储在linklist
列表中。然后,代码循环访问linklist
,对于每个链接,它将下载配方文本,然后将数据存储到recipe_list
from bs4 import BeautifulSoup
import requests
from splinter import browser
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import selenium
import time
import csv
#set up chromedriver for WINDOWS
driver=webdriver.Chrome('chromedriver.exe')
url = "https://www.simplyrecipes.com/index/"
driver.get(url)
response=requests.get(url)
soup=BeautifulSoup(response.text,'html.parser')
#set up chromedriver for MAC
driver=webdriver.Chrome("/Users/williamforsyth/Documents/uc_davis/Homework_Repos/group-project-2/Kathryn/chromedriver")
url = "https://www.simplyrecipes.com/index/"
driver.get(url)
response=requests.get(url)
soup=BeautifulSoup(response.text,'html.parser')
linklist=[]
links=soup.find_all('a')
for link in links:
linklist.append(link)
linklist_text=[]
for i in range(164,1068):
linklist_text.append(linklist[i].text)
recipe_list=[]
for link in linklist_text:
time.sleep(0.3)
target=driver.find_element_by_partial_link_text(link)
target.click()
time.sleep(0.1)
cards = driver.find_elements_by_class_name("Grd-title-link")
for i in range(0,len(cards)):
try:
newcards = driver.find_elements_by_class_name("Grd-title-link")
time.sleep(0.3)
newcards[i].click()
time.sleep(0.3)
recipe=driver.find_element_by_id("sr-recipe-callout")
recipe_list.append(recipe.text)
driver.back()
time.sleep(0.3)
except:
continue
driver.get(url)
问题:
记住,此代码未使用我现在想实现的功能编写,即我想附加{{1}从每个循环到一个csv文件。这是我想要尝试添加到CSV以及现在执行的代码的代码,现在添加到 recipe_list
recipe.text
是否有一种简单的方法可以实现这一目标,而不必重新编写整个代码?
解决方法
编写包含单列配方文本的CSV的一种简单方法是在编写recipe_list
之后使用csv模块:
import csv
with open('recipies.csv',mode='w',newline='') as fileobj:
csv.writer(fileobj).writerows([col] for col in recipe_list)
这将在您每次运行时覆盖收件人文件。您可以使用mode='a'
进行追加。
您要“ ..将每个循环中的配方。文本添加到csv文件中”
如果您只想将其转储到TRY循环的每个迭代中,则可以导入阅读器,并将“ recipe_list.append(recipe.text)”替换为:
import csv
with open('recipe_output.csv','w',newline='') as csvfile:
writer = csv.writer(csvfile,delimiter=',')
writer.writerow(recipe.text)
在循环开始之前的某处设置“ with open()”和“ writer =“行,并使用此“ writer.writerow”行替换当前的“ recipe_list.append(recipe.text)”行。这样,您就可以将每个循环的文件转储到CSV文件中,而不是从末尾的附加列表中转储很多