Scrapy:满足条件时如何在start_urls中抓取下一个URL

时间:2019-07-28 08:55:52

标签: web-scraping scrapy extract

在满足给定条件的情况下,是否有任何方法可以停止对当前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}

2 个答案:

答案 0 :(得分:1)

在yield对我有用之后,简单地调用return

yield {
   'lorem': 'ipsum'
}
return

答案 1 :(得分:0)

parse_number函数中,检查匹配日期的条件。如果条件匹配,则产生数据并停止从特定域爬网。否则继续其余的爬网。