gpt4 book ai didi

python - 如何使用 Python 仅抓取新链接(在上一次抓取之后)

转载 作者:行者123 更新时间:2023-12-01 08:03:55 25 4
gpt4 key购买 nike

我正在从网站上抓取和下载链接,该网站每天都会更新新链接。我希望每次我的代码运行时,它只抓取/下载自上次程序运行以来更新的链接,而不是再次运行整个代码。

我尝试将以前抓取的链接添加到空列表中,并且仅在列表中找不到抓取的链接时才执行其余代码(下载并重命名文件)。但它似乎没有按预期工作,每次我运行代码时,它都会“从 0”开始并覆盖以前下载的文件。

我应该尝试其他方法吗?

这是我的代码(也欢迎有关如何清理它并使其变得更好的一般建议)

import praw
import requests
from bs4 import BeautifulSoup
import urllib.request
from difflib import get_close_matches
import os

period = '2018 Q4'
url = 'https://old.reddit.com/r/test/comments/b71ug1/testpostr23432432/'
headers = {'User-Agent': 'Mozilla/5.0'}
page = requests.get(url, headers=headers)

#set soup
soup = BeautifulSoup(page.text, 'html.parser')
table = soup.find_all('table')[0]

#create list of desired file names from existing directory names
candidates = os.listdir('/Users/test/Desktop/Test')
#set directory to download scraped files to
downloads_folder = '/Users/test/Desktop/Python/project/downloaded_files/'

#create empty list of names
scraped_name_list = []

#scrape site for names and links
for anchor in table.findAll('a'):
try:
if not anchor:
continue
name = anchor.text
letter_link = anchor['href']
#if name doesn't exist in list of names: append it to the list, download it, and rename it
if name not in scraped_name_list:
#append it to name list
scraped_name_list.append(name)
#download it
urllib.request.urlretrieve(letter_link, '/Users/test/Desktop/Python/project/downloaded_files/' + period + " " + name + '.pdf')
#rename it
best_options = get_close_matches(name, candidates, n=1, cutoff=.33)
try:
if best_options:
name = (downloads_folder + period + " " + name + ".pdf")
os.rename(name, downloads_folder + period + " " + best_options[0] + ".pdf")
except:
pass
except:
pass
#else skip it
else:
pass

最佳答案

每次运行此命令时,它都会将 scraped_name_list 重新创建为新的空列表。您需要做的是在运行结束时保存列表,然后尝试在任何其他运行中导入它。 pickle 库非常适合此目的。

不要定义scraped_name_list = [],而是尝试这样的事情

try:
with open('/path/to/your/stuff/scraped_name_list.lst', 'rb') as f:
scraped_name_list = pickle.load(f)
except IOError:
scraped_name_list = []

这将尝试打开您的列表,但如果这是第一次运行(意味着列表尚不存在),它将以空列表开始。然后在代码末尾,您只需保存文件,以便在其他运行时使用它:

with open('/path/to/your/stuff/scraped_name_list.lst', 'wb') as f:
pickle.dump(scraped_name_list, f)

关于python - 如何使用 Python 仅抓取新链接(在上一次抓取之后),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55618338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com