如果已经存在Content ID,则python scrapy最佳方法不重新抓取

时间:2018-08-16 06:57:40

标签: python scrapy

以下是抓取结果,如何防止基于Seller_id的重复?目前,我在页面和页面之间进行爬网,但希望根据ID获得唯一的结果。如果它在上一次爬网的页面中看到相同的Seller_id,请不要再次爬网。

{"name": "aaa", "seller_id": "1111", "seller_url": "/s-seller/aaa/1111/date/1"},
{"name": "bbb", "seller_id": "5555", "seller_url": "/s-seller/bbb/5555/date/1"},
{"name": "aaa", "seller_id": "1111", "seller_url": "/s-seller/aaa/1111/date/1"},

以下是我到目前为止的内容,如您所见,如果int(clean_total_ads)> 500,则仅过滤超过500个以上的广告并在结果中显示,但我还需要过滤唯一的Seller_ID < / p>

def parse(self, response):
    sel = Selector(response)
    for link in sel.xpath("//*[contains(@href, '/aaaad/')]"):
        ad_link = link.css('a::attr(href)').extract_first()
        absolute_url = self.home_url + ad_link
        yield response.follow(absolute_url, self.parse_each_ad)


def parse_each_ad(self, response):
    def extract_with_css(query):
        return response.css(query).extract_first()

    total_ads = remove_tags(extract_with_css('span.seller-profile__number-of-ads'))
    clean_total_ads = re.sub('[^0-9]', '', total_ads)
    name = remove_tags(extract_with_css('span.seller'))
    seller_id_raw = extract_with_css('div.seller a::attr(href)')
    seller_id_compile = re.compile('.*\/(\d+)\/.*')
    seller_id_match = seller_id_compile.match(seller_id_raw).group(1)


    if int(clean_total_ads) > 500:
        yield {
            'name': name,
            'seller_id': seller_id_match,
            'seller_url': seller_id_raw,


             }

1 个答案:

答案 0 :(得分:1)

Scrapy实际上自动管理重复爬网。 如果您想明确地这样做,可以尝试以下操作:

gunicorn