我正在使用此蜘蛛抓取页面并下载其图像:
import scrapy
from scrapy.contrib.spiders import Rule, CrawlSpider
from scrapy.contrib.linkextractors import LinkExtractor
from imgur.items import ImgurItem
import re
from urlparse import urljoin
class ImgurSpider(CrawlSpider):
name = 'imgur'
allowed_domains = ['some.page']
start_urls = [u'some.page']
rules = [Rule(LinkExtractor(allow=['.*']), 'parse_imgur')]
def parse_imgur(self, response):
image = ImgurItem()
image['title'] = 'a'
relative_urls = re.findall('= "([^"]+.jpg)',response.body)
image['image_urls'] = [urljoin(response.url, url) for url in relative_urls]
return image
但我在这里有两个问题,第一个是我无法将深度限制设置为一个altought我在运行蜘蛛时使用“-s DEPTH_LIMIT = 1”:
scrapy crawl imgur -s DEPTH_LIMIT = 1
第二个问题是我收到了除主页之外的所有网页图片:
我没有从该页面获取任何图像。
编辑。
一个@ Javitronxo
像这样:
def parse(self, response):
image = ImgurItem()
image['title'] = 'a'
relative_urls = re.findall('= "([^"]+.jpg)',response.body)
image['image_urls'] = [urljoin(response.url, url) for url in relative_urls]
return image
我没有那样的图像。
答案 0 :(得分:2)
由于您的代码中有此规则:
validateValues
蜘蛛从网页中提取所有链接,因此最终会被跟踪。
如果您只想抓取主页面中的图片,我建议删除规则并更改覆盖默认rules = [Rule(LinkExtractor(allow=['.*']), 'parse_imgur')]
的方法标题:
parse
这样蜘蛛就会开始抓取def parse(self, response):
字段中的图像,返回对象,然后完成执行。