我有一个蜘蛛,它从网页上抓取数据并将标题、文本和 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 并提取它。
提前致谢