我从DESWATER网站提取数据,然后将这些数据保存在CSV中。为了说明这个问题,我有两个作者,一个有一个完整的文本文件,另一个没有。因此,它会将文件保存到错误的作者。
CSV输出如下所示:
Authors | File
First Author | Second File
Second Author | Third File
但我希望输出像这样:
Authors | File
First Author | 'No File'
Second Author | Second File
Third Author | Third File
下面是一个小测试代码:
from bs4 import BeautifulSoup
import requests
import time
import csv
list_of_authors = []
list_of_full_file = []
r = requests.get('https://www.deswater.com/vol.php?vol=1&oth=1|1-3|January|2009')
# Parsing the HTML
soup = BeautifulSoup(r.content, 'html.parser')
#'Author'
s = soup.find('td', class_='testo_normale')
authors = s.find_all('i')
for author in authors:
list_of_authors.append(author.text.strip())
time.sleep(1)
#'FULL TEXT'
# find all the anchor tags with "href"
n=1
for link in soup.find_all('a', class_='testo_normale_rosso'):
if "fulltext.php?abst=" in link.get('href'):
# TO ADD
baseurl = 'https://www.deswater.com/'
Full_links=baseurl+link.attrs['href'].replace('\n','')
list_of_full_file.append(f'file {n}')
n+=1
time.sleep(1)
def Save_csv():
row_head =['Author', 'File Name']
Data = []
for author, file in zip(list_of_authors, list_of_full_file):
Data.append(author)
Data.append(file)
rows = [Data[i:i + 2] for i in range(0, len(Data), 2)]
with open('data.csv', 'w', encoding='utf_8_sig', newline="") as csvfile:
csvwriter = csv.writer(csvfile)
csvwriter.writerow(row_head)
csvwriter.writerows(rows)
Save_csv()
这段代码最终将从279页中提取数据,因此我需要代码自动检测到没有该作者的全文,这样我就可以将其附加为“无文件”
请参考网站here中的正确匹配。第一作者没有全文文件。有什么想法吗?
1条答案
按热度按时间ldfqzlk81#
尝试改变你的策略选择元素,避免多个列表,如果你不能确保相同的长度。
在此处使用
css selectors
选择所有<hr>
,这些<hr>
是使用find_previous()
进行的所有其他选择的基础:示例
输出