Таким образом, мой паук занимает список веб-сайтов, и он проскакивает через каждый через start_requests
, который yield
request
, проходящий в item
как meta
.Когда нужно вернуть Предмет, если я не знаю, когда паук закончит?
Затем паук исследует все внутренние ссылки одного веб-сайта и собирает все внешние ссылки в item
. Проблема в том, что я не знаю, когда паук заканчивает сканирование всех внутренних ссылок, поэтому я не могу yield
item
.
class WebsiteSpider(scrapy.Spider):
name = "web"
def start_requests(self):
filename = "websites.csv"
requests = []
try:
with open(filename, 'r') as csv_file:
reader = csv.reader(csv_file)
header = next(reader)
for row in reader:
seed_url = row[1].strip()
item = Links(base_url=seed_url, on_list=[])
request = Request(seed_url, callback=self.parse_seed)
request.meta['item'] = item
requests.append(request)
return requests
except IOError:
raise scrapy.exceptions.CloseSpider("A list of websites are needed")
def parse_seed(self, response):
item = response.meta['item']
netloc = urlparse(item['base_url']).netloc
external_le = LinkExtractor(deny_domains=netloc)
external_links = external_le.extract_links(response)
for external_link in external_links:
item['on_list'].append(external_link)
internal_le = LinkExtractor(allow_domains=netloc)
internal_links = internal_le.extract_links(response)
for internal_link in internal_links:
request = Request(internal_link, callback=self.parse_seed)
request.meta['item'] = item
yield request
Можете ли вы показать свой текущий код паука? Благодарю. – alecxe
@alecxe Отредактировано! –