Я заранее создал много URL. Мне нужно решить, следует ли продолжить сканирование следующего URL-адреса в соответствии с DateTime
содержимого URL-адреса. Однако я не могу реализовать этот вид проверки из-за псевдокода yield
.
:
for url in urls:
if not Auth(url.content.datetime):
break
Я попытался установить временную метку глобального сообщения, чтобы определить, является ли время соответствует критериям для следующего запроса URL. Но, похоже, он ограничен yield
, который не выполняется и является генератором.
код:
# -*- coding: utf-8 -*-
from lxml import etree
import scrapy
from scrapy_splash import SplashRequest
domain = "guba.eastmoney.com"
def make_urls(code: list) -> list:
return [f"http://{domain}/list,{x}.html" for x in code]
url_list = make_urls(['000001'])
class EsCommentSpider(scrapy.Spider):
name = 'es_comment'
allowed_domains = ['guba.eastmoney.com']
start_urls = url_list
def headers(self):
return {"User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"}
def start_requests(self):
for x in self.start_urls:
yield SplashRequest(x, callback=self.parse)
def parse(self, response):
count = response.xpath('//*[@class="sumpage"]/text()').extract_first()
count = 20
urls = [response.url]
for x in range(1, count):
urls.append(f"{response.url.replace('.html', f'_{str(x)}.html')}")
for url in urls:
# I need to get the datetime in page_parse function and decide whether to continue
yield scrapy.Request(url, callback=self.page_parse, headers=self.headers())
def page_parse(self, response):
lis = response.xpath(
"//div[contains(@class,'articleh normal_post')]").extract()
for x in lis:
block = etree.HTML(x)
datetime = block.xpath("//span[@class='l5 a5']/text()")[0]