在满足给定条件的情况下,是否有任何方法可以停止对当前URL进行爬网,并跳转并爬网start_urls中的下一个URL。 在这里,我使用预定义的日期测试页面中的日期。 满足该条件后,我想停止抓取URL。
修改 我的代码如下,
class MarketSpider(scrapy.Spider):
name = 'test'
allowed_domains = ['example.com']
start_urls = []
date_limit = datetime.strptime('07/01/2019', '%m/%d,/%Y')
for url in open("urls.txt"):start_urls.append(url)
def start_requests(self):
for url in self.start_urls:
category = url.split('/')[4]
yield scrapy.Request(url=url, callback=self.parse, meta={'category': category})
def parse(self, response):
date_limit = self.date_limit
category = response.request.category
item_url = response.xpath("//div[@class='white-block-content']")
for i in item_url:
url_ = i.xpath("./a/@href").extract_first()
date = i.xpath("./p[@class='date']/text()").extract_first()
dt_obj = datetime.strptime(date, '%B %d, %Y')
if dt_obj >= date_limit:
yield scrapy.Request(url , callback = self.parse_number, meta={'category': category,'u_date':dt_obj })
next_page = response.css('a[rel="next"]::attr(href)').extract_first()
if next_page is not None:
yield scrapy.Request(next_page, callback = self.parse)
def parse_number(self, response):
category = response.request.category
url = response.request.url
url = url.strip()
u_date = response.request.u_date
phone_number = response.xpath("//div[@id='contact-top']//li/@data-value").extract()
for i in phone_number:
yield {
'category': category,
'u_date': u_date,
'url': url,
'phone_number': i}
答案 0 :(得分:1)
在yield对我有用之后,简单地调用return
yield {
'lorem': 'ipsum'
}
return
答案 1 :(得分:0)
在parse_number
函数中,检查匹配日期的条件。如果条件匹配,则产生数据并停止从特定域爬网。否则继续其余的爬网。