我已经阅读了其他一些答案,但我遗漏了一些基本的东西。我正在尝试使用CrawlSpider从网站中提取图像。
settings.py
BOT_NAME = 'healthycomm'
SPIDER_MODULES = ['healthycomm.spiders']
NEWSPIDER_MODULE = 'healthycomm.spiders'
ITEM_PIPELINES = {'scrapy.contrib.pipeline.images.ImagesPipeline': 1}
IMAGES_STORE = '~/Desktop/scrapy_nsml/healthycomm/images'
items.py
class HealthycommItem(scrapy.Item):
page_heading = scrapy.Field()
page_title = scrapy.Field()
page_link = scrapy.Field()
page_content = scrapy.Field()
page_content_block = scrapy.Field()
image_url = scrapy.Field()
image = scrapy.Field()
HealthycommSpider.py
class HealthycommSpiderSpider(CrawlSpider):
name = "healthycomm_spider"
allowed_domains = ["healthycommunity.org.au"]
start_urls = (
'http://www.healthycommunity.org.au/',
)
rules = (Rule(SgmlLinkExtractor(allow=()), callback="parse_items", follow=False), )
def parse_items(self, response):
content = Selector(response=response).xpath('//body')
for nodes in content:
img_urls = nodes.xpath('//img/@src').extract()
item = HealthycommItem()
item['page_heading'] = nodes.xpath("//title").extract()
item["page_title"] = nodes.xpath("//h1/text()").extract()
item["page_link"] = response.url
item["page_content"] = nodes.xpath('//div[@class="CategoryDescription"]').extract()
item['image_url'] = img_urls
item['image'] = ['http://www.healthycommunity.org.au' + img for img in img_urls]
yield item
我对Python一般不太熟悉,但我觉得我在这里缺少一些非常基本的东西。
谢谢, 杰米
答案 0 :(得分:3)
如果您想使用标准ImagesPipeline
,则需要将parse_items
方法更改为:
import urlparse
...
def parse_items(self, response):
content = Selector(response=response).xpath('//body')
for nodes in content:
# build absolute URLs
img_urls = [urlparse.urljoin(response.url, src)
for src in nodes.xpath('//img/@src').extract()]
item = HealthycommItem()
item['page_heading'] = nodes.xpath("//title").extract()
item["page_title"] = nodes.xpath("//h1/text()").extract()
item["page_link"] = response.url
item["page_content"] = nodes.xpath('//div[@class="CategoryDescription"]').extract()
# use "image_urls" instead of "image_url"
item['image_urls'] = img_urls
yield item
您的商品定义需要" images
"和" image_urls
"字段(复数,不是单数)
另一种方法是设置IMAGES_URLS_FIELD
和IMAGES_RESULT_FIELD
以适合您的商品定义