【发布时间】:2016-05-19 13:11:38
【问题描述】:
我是 Scrapy 的新手,到目前为止还没有找到任何帮助。
我想做一个小的scraper,它可以scraper页面上的所有url,然后一个一个地点击它们,如果Url返回任何可下载的文件然后下载任何扩展并将其保存到指定位置。 这是我编写的代码: items.py
import scrapy
class ZcrawlerItem(scrapy.Item):
file = scrapy.Field()
file_url = scrapy.Field()
spider.py
from scrapy import Selector
from scrapy.spiders import CrawlSpider, Rule
from scrapy.http import Request
DOMAIN = 'example.com'
URL = 'http://%s' % DOMAIN
from crawler.items import CrawlerItem
class MycrawlerSpider(CrawlSpider):
name = "mycrawler"
allowed_domains = [DOMAIN]
start_urls = [
URL
]
def parse_dir_contents(self, response):
print(response.headers)
item = CrawlerItem()
item['file_url'] = response.url
return item
def parse(self, response):
hxs = Selector(response)
for url in hxs.xpath('//a/@href').extract():
if (url.startswith('http://') or url.startswith('https://')):
yield Request(url, callback=self.parse_dir_contents)
for url in hxs.xpath('//iframe/@src ').extract():
yield Request(url, callback=self.parse_dir_contents)
我面临的问题是 parse_dir_contents 没有显示标题,因此很难检查响应数据是任何可下载的文件还是只是内容。
顺便说一句,我正在使用 Scrapy 1.1.0 和 Python 3.4
任何帮助将不胜感激!
【问题讨论】:
-
这主要是一个字符串处理问题,你只需要在
response.body里面找到你想要的链接,下载它可以检查this answer -
你如何决定什么是可下载的文件?
-
我认为每个链接都是一个可下载的文件,甚至是一个链接(它是一个 html 文件),但您可能想检查它们是否有某种扩展名。
-
这里的问题是某些文件没有扩展名,所以在这种情况下我如何检查它是否可以下载。他们是否有任何特定的标头或元数据可用于响应可下载链接?
标签: python-3.x web-scraping scrapy