Что я понимаю, так это то, что вы хотите убедиться, что каждая страница внутри urls
была успешно удалена и в ней есть ссылки, если да, то посмотрите этот код ниже
import scrapy
from scrapy import signals
from scrapy.xlib.pydispatch import dispatcher
class QuotesSpider(scrapy.Spider):
name = "recipes"
urls = []
def __init__(self):
dispatcher.connect(self.spider_closed, signals.spider_closed)
def start_requests(self):
for i in range (1, 60):
curr_url = "https://pinchofyum.com/recipes?fwp_paged=%s" % i
self.log(curr_url)
self.urls.append(curr_url)
yield scrapy.Request(url=curr_url, callback=self.parse)
def parse(self, response):
page_links = response.css(".post-summary")
if len(page_links)>0:
del self.urls[response.url] #delete from URLS to confirm that it has been parsed
for link in page_links:
with open("links.txt", "a") as f:
f.write(link.a["href"] + "\n")
def spider_closed(self, spider):
self.log("Following URLs were not parsed: %s"%(self.urls))
Что он делает, так этоон добавляет все URL-адреса для очистки в self.urls
, и после того, как URL-адрес очищается, а также содержит ссылки, он удаляет из self.urls
И обратите внимание, что есть еще один метод с именем spider_closed
, он выполняетсятолько когда скребок закончен, поэтому он будет печатать URL-адреса, которые не были очищены или в которых не было ссылок
Кроме того, зачем использовать BeautifulSoup?просто используйте класс селектора Python Scrapy