我目前正在为自己做一个项目,其中包括抓取这个特定的网站。
我的代码目前如下所示:
for i in range(0,4):
my_url = 'https://www.kickante.com.br/campanhas-crowdfunding?page='+str(i)
uclient = ureq(my_url)
page_html = uclient.read()
uclient.close()
page_soup = soup(page_html, 'html.parser')
containers = page_soup.find_all("div", {"class":"campaign-card-wrapper views-row"})
for container in containers:
#Achando os títulos das campanhas
titleCampaignBruto = container.div.div.a.img["title"].replace('Crowdfunding para: ', '')
titleCampaignParsed = titleCampaignBruto.strip().replace(",", ";")
#Achando o valor da campanha
arrecadadoFind = container.div.find_all("div",{"class":"funding-raised"})
arrecadado = arrecadadoFind[0].text.strip().replace(",", ".")
#Número de doadores
doadoresBruto = container.div.find_all('span', {"class":"contributors-value"})
doadoresParsed = doadoresBruto[0].text.strip().replace(",",";")
#target da campanha
fundingGoal = container.div.find_all('div', {"class":"funding-progress"})
quantoArrecadado = fundingGoal[0].text.strip().replace(",",";")
#Descricao da campanha
descricaoBruta = container.div.find_all('div', {"class":"field field-name-field-short-description field-type-text-long field-label-hidden"})
descricaoParsed = descricaoBruta[0].text.strip().replace(",",";")
#link da campanha
linkCampanha = container.div.find_all('href')
print("Título da campanha: " + titleCampaignParsed)
print("Valor da campanha: " +arrecadado)
print("Doadores: "+ doadoresParsed)
print("target: " + quantoArrecadado)
print("descricao: " + descricaoParsed)
f.write(titleCampaignParsed + "," + arrecadado + "," + doadoresParsed + "," + quantoArrecadado+ "," + descricaoParsed.replace("," ,";") + "n")
i = i+1
f.close()
当我打开它生成的 csv 文件时,我看到一些行在不应该出现的地方被断开(例如:请参阅 csv 文件上的第 31 行(。该行应是上一行(第 30 行(的一部分,作为说明的主体。
有谁知道是什么原因造成的?提前谢谢。
您写入 CSV 的某些文本可能包含换行符。您可以像这样删除它们:
csv_line_entries = [
titleCampaignParsed, arrecadado, doadoresParsed,
quantoArrecadado, descricaoParsed.replace("," ,";")
]
csv_line = ','.join([
entry.replace('n', ' ') for entry in csv_line_entries
])
f.write(csv_line + 'n')
错误的原因
strip()
方法仅删除前导和尾随换行符/空格。
import bs4
soup = bs4.BeautifulSoup('<p>Whatevernelsen</p>')
soup.find('p').text.strip()
>>> 'Whatevernelse'
请注意,不会删除内部n
。
文本中间有换行符。strip()
只会删除字符串开头和结尾的空格,因此您需要改用replace('n','')
。这将替换所有n
换行符,没有任何''