开始使用scrapy
来源:互联网 发布:中国移动互联网数据 编辑:程序博客网 时间:2024/06/05 09:16
scrapy 官方文档
#类1import scrapyclass QuotesSpider(scrapy.Spider): name = "quotes" def start_requests(self): urls = [ 'http://quotes.toscrape.com/page/1/', 'http://quotes.toscrape.com/page/2/', ] for url in urls: yield scrapy.Request(url=url, callback=self.parse) def parse(self, response): page = response.url.split("/")[-2] filename = 'quotes-%s.html' % page with open(filename, 'wb') as f: f.write(response.body) self.log('Saved file %s' % filename)
#类2import scrapyclass QuotesSpider(scrapy.Spider): name = "quotes" start_urls = [ 'http://quotes.toscrape.com/tag/humor/', ] def parse(self, response): for quote in response.css('div.quote'): yield { 'text': quote.css('span.text::text').extract_first(), 'author': quote.xpath('span/small/text()').extract_first(), } next_page = response.css('li.next a::attr("href")').extract_first() if next_page is not None: yield response.follow(next_page, self.parse)
如果用class 属性 start_urls初始化一个url列表,不重写start_requests方法,框架会调用默认的start_requests方法,用start_urls来生成 initial requests.
从上面两个例子看出,parse方法,response参数是TextResponse类型,可以返回具体数据,用框架实现的方法写入到文件,也可以程序把数据写入文件,也可以返回item,还可以返回新的reqeust,这里用的response.follow(next_page, self.parse),next_page可以是相对路径,scrapy.Request(url=url, callback=self.parse),这里url是全链接。
scrapy setting: scrapy 默认设置
优先级一:命令行设置,-s(–set)
scrapy crawl myspider -s LOG_FILE=scrapy.log
这里是不是可以设置User-Agent?
优先级二:per spider settings
class MySpider(scrapy.Spider):
name = ‘myspider’
custom_settings = {
‘SOME_SETTING’: ‘some value’,
}
优先级三:项目settings.py文件
note:一个项目下可能有多个spider,不同的配置就可以写到每个爬虫类里面,而settings.py对这多个爬虫都有效果。
下载中间件:(理解还不够深刻,待完善)
默认的下载中间价以及order:
{
‘scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware’: 100,
‘scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware’: 300,
‘scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware’: 350,
‘scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware’: 400,
‘scrapy.downloadermiddlewares.useragent.UserAgentMiddleware’: 500,
‘scrapy.downloadermiddlewares.retry.RetryMiddleware’: 550,
‘scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware’: 560,
‘scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware’: 580,
‘scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware’: 590,
‘scrapy.downloadermiddlewares.redirect.RedirectMiddleware’: 600,
‘scrapy.downloadermiddlewares.cookies.CookiesMiddleware’: 700,
‘scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware’: 750,
‘scrapy.downloadermiddlewares.stats.DownloaderStats’: 850,
‘scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware’: 900,
}
自定义中间件要实现一下方法的一个或多个:
process_request(request, spider)
process_response(request, response, spider)
process_exception(request, exception, spider)
def process_request(self, request, spider),这个方法可以返回None(或者没有return),返回request,返回htmlresponse,返回Ignorerequest。
返回None,这种情况一般是修改request对象,scrapy engine会调用下一个中间件的这个方法来继续处理这个reqeust;返回request,这种情况好像是要返回request给调度器(不是很清楚),不过这种情况比较少;返回htmlresponse,这种情况后续中间件的process_request不会被调用,而process_response方法会被调用(如果有这个方法)。
自定义下载中间件order确定:待研究
spide中间件:
作用在spider收到response之前,处理response;也可以作用在spider产生的request或者item上面。
默认的spider和order:
{
‘scrapy.spidermiddlewares.httperror.HttpErrorMiddleware’: 50,
‘scrapy.spidermiddlewares.offsite.OffsiteMiddleware’: 500,
‘scrapy.spidermiddlewares.referer.RefererMiddleware’: 700,
‘scrapy.spidermiddlewares.urllength.UrlLengthMiddleware’: 800,
‘scrapy.spidermiddlewares.depth.DepthMiddleware’: 900,
}
自定义spider中间件要实现以下一个或多个方法:
process_spider_input(response, spider)
process_spider_output(response, result, spider)
process_start_requests(start_requests, spider)
自定义spider中间件order确定:待研究
一时理解,请不吝指正
- 开始使用scrapy
- scrapy使用
- 开始做事—安装scrapy
- scrapy-redis集成scrapy-splash使用教程
- Scrapy使用心得
- 使用scrapy爬取整站图片
- scrapy 使用代理
- Scrapy的使用
- scrapy 使用代理
- scrapy框架基本使用
- scrapy使用笔记
- scrapy中使用代理
- Scrapy安装及使用
- scrapy&mongodb基本使用
- Scrapy使用心得
- scrapy使用进阶
- 【scrapy】使用记录
- Scrapy入门使用
- golang调用c++dll 获取mac地址,用户名,内存大小
- numpy.array切片和索引操作
- spring学习过程
- centos6修改yum源
- ORACLE 解决死锁问题
- 开始使用scrapy
- ./configure: error: the HTTP rewrite module requires the PCRE library
- 金额转换,阿拉伯数字的金额转换成中国传统的形式:
- Metalink Note:中文文档列表
- 大数据1的思考
- npm ERR! Error: EPERM: operation not permitted, scandir 'D:\
- weex更新方案探索(五)
- CentOS查看 占用 内存 最多的 进程
- java开源实例资源分享