1

我有一个蜘蛛,它从网页上抓取数据并将标题、文本和 img url 写入 mongoDB。

我有两个功能:

def parse_news(self, response):
    item = NewsItem()
    item['_id'] = .. #key for MongoDB - Unique
    item['Title'] = ..
    item['URL'] = ..
    if len(..): #check if the article has a gallery
        for i in xrange(2, 5): #if yes iterate through all the images
                gallery_img_link = urlparse.urljoin(response.url, '%d/#gallery_photo' %i)
                yield Request(gallery_img_link, meta={'item': item}, callback=self.parse_gallery) #request the page and call the function that extracts the img url
    yield item

def parse_gallery(self, response):
    if len(response.xpath('//*[@id="gallery_photo"]/div/img/@src').extract_first()): #check if img URL exists so that if you get out of range there are no empty values
        item = response.meta['item']
        item['Gallery'] = response.xpath('//*[@id="gallery_photo"]/div/img/@src').extract_first()
        yield item

我希望将item['Gallery']提取的 img 的 URL 存储为一个数组,并在循环完成时将它们写入 mongoDB。

所以要传递item['Gallery']给第二个函数,添加 img url 并在 if 循环完成时获取数据以产生或写入 mongodb。

为什么需要这样做:我面临的问题是提取画廊的图像 URL。图库没有所有图像的列表,但您必须单击下一步才能获取下一个图像 URL。单击图库中的下一张图片时,它会刷新整个页面并更改页面的 URL,如下所示:

http://www.website.com/news-1-title/2/#gallery_photo用于第二张图片和/3/#gallery_photo第三张图片,依此类推。

该函数从 2-5 循环并检查是否有 img url 并提取它。

提前致谢

4

0 回答 0