- 部分 I. Python 入门
- 第 1 章 Python 入门
- 第 2 章 Python Package Index (PyPI)
- 第 3 章 Python 模块
- 第 4 章 数据类型
- 第 5 章 数据结构
- 第 6 章 Class
- 第 7 章 Input/Output
- 第 8 章 Pipe
- 第 9 章 Library
- 9.2. 随机数
- 9.3. Python 多线程
- 9.13. syslog
- 9.5. Socket
- 9.6. subprocess
- 9.7. YAML
- 9.8. Daemon
- 9.9. python-memcached
- 9.10. Pyro - Pyro is short for PYthon Remote Objects
- 9.11. Python Imaging Library
- 9.12. getopt – Command line option parsing
- 9.14. python-subversion
- 9.15. SimpleHTTPServer
- 9.16. fuse-python.x86_64 : Python bindings for FUSE - filesystem in userspace
- 9.17. Network
- 9.18. Python-spdylay - Spdylay Python Extension Module
- 9.19. mechanize
- 9.20. Dominate
- 第 10 章 Frameworks
- 第 12 章 终端环境开发
- 部分 II. Python 数据分析
- 第 13 章 Crawler
- 第 14 章 Scrapy - Python web scraping and crawling framework
- 第 15 章 Pandas - Python Data Analysis Library
- 第 16 章 股票
- 第 17 章 数据可视化
- 部分 III. 人工智能 AI
- 第 18 章 OCR
- 第 19 章 语音处理
- 第 20 章 视频
- 第 21 章 人脸识别
- 第 22 章 自然语言处理
- 第 23 章 自动化运维
- 第 24 章 办公自动化
- 第 25 章 OpenCV
- 第 26 章 图形开发
- 第 27 章 3rdparty toolkit
- 第 29 章 实用代码
- 第 30 章 FAQ
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
14.3. Scrapy Shell
14.3. Scrapy Shell
Scrapy Shell 是一个爬虫命令行交互界面调试工具,可以使用它分析被爬的页面
neo@MacBook-Pro /tmp % scrapy shell http://www.netkiller.cn 2017-09-01 15:23:05 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: scrapybot) 2017-09-01 15:23:05 [scrapy.utils.log] INFO: Overridden settings: {'DUPEFILTER_CLASS': 'scrapy.dupefilters.BaseDupeFilter', 'LOGSTATS_INTERVAL': 0} 2017-09-01 15:23:05 [scrapy.middleware] INFO: Enabled extensions: ['scrapy.extensions.corestats.CoreStats', 'scrapy.extensions.telnet.TelnetConsole', 'scrapy.extensions.memusage.MemoryUsage'] 2017-09-01 15:23:05 [scrapy.middleware] INFO: Enabled downloader middlewares: ['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware', 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware', 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware', 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware', 'scrapy.downloadermiddlewares.retry.RetryMiddleware', 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware', 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware', 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware', 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware', 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware', 'scrapy.downloadermiddlewares.stats.DownloaderStats'] 2017-09-01 15:23:05 [scrapy.middleware] INFO: Enabled spider middlewares: ['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware', 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware', 'scrapy.spidermiddlewares.referer.RefererMiddleware', 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware', 'scrapy.spidermiddlewares.depth.DepthMiddleware'] 2017-09-01 15:23:05 [scrapy.middleware] INFO: Enabled item pipelines: [] 2017-09-01 15:23:05 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023 2017-09-01 15:23:05 [scrapy.core.engine] INFO: Spider opened 2017-09-01 15:23:05 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://www.netkiller.cn> (referer: None) [s] Available Scrapy objects: [s] scrapy scrapy module (contains scrapy.Request, scrapy.Selector, etc) [s] crawler <scrapy.crawler.Crawler object at 0x103b2afd0> [s] item {} [s] request <GET http://www.netkiller.cn> [s] response <200 http://www.netkiller.cn> [s] settings <scrapy.settings.Settings object at 0x1049019e8> [s] spider <DefaultSpider 'default' at 0x104be2a90> [s] Useful shortcuts: [s] fetch(url[, redirect=True]) Fetch URL and update local objects (by default, redirects are followed) [s] fetch(req) Fetch a scrapy.Request and update local objects [s] shelp() Shell help (print this help) [s] view(response) View response in a browser >>>
14.3.1. response
response 是爬虫返回的页面,可以通过 css(), xpath() 等方法取出你需要的内容。
14.3.1.1. 当前URL地址
>>> response.url 'https://netkiller.cn/linux/index.html'
14.3.1.2. status HTTP 状态
>>> response.status 200
14.3.1.3. text 正文
返回 HTML 页面正文
response.text
14.3.1.4. css
css() 这个方法可以用来选择html和css
>>> response.css('title') [<Selector xpath='descendant-or-self::title' data='<title>Netkiller ebook - Linux ebook</ti'>] >>> response.css('title').extract() ['<title>Netkiller ebook - Linux ebook</title>'] >>> response.css('title::text').extract() ['Netkiller ebook - Linux ebook']
基于 class 选择
>>> response.css('a.ulink')[1].extract() '<a href="http://netkiller.github.io/" target="_top">http://netkiller.github.io</a>' >>> response.css('a.ulink::text')[3].extract() 'http://netkiller.sourceforge.net'
数组的处理
>>> response.css('a::text').extract_first() '简体中文' >>> response.css('a::text')[1].extract() '繁体中文' >>> response.css('div.blockquote')[1].css('a.ulink::text').extract() ['Netkiller Architect 手札', 'Netkiller Developer 手札', 'Netkiller PHP 手札', 'Netkiller Python 手札', 'Netkiller Testing 手札', 'Netkiller Java 手札', 'Netkiller Cryptography 手札', 'Netkiller Linux 手札', 'Netkiller FreeBSD 手札', 'Netkiller Shell 手札', 'Netkiller Security 手札', 'Netkiller Web 手札', 'Netkiller Monitoring 手札', 'Netkiller Storage 手札', 'Netkiller Mail 手札', 'Netkiller Docbook 手札', 'Netkiller Project 手札', 'Netkiller Database 手札', 'Netkiller PostgreSQL 手札', 'Netkiller MySQL 手札', 'Netkiller NoSQL 手札', 'Netkiller LDAP 手札', 'Netkiller Network 手札', 'Netkiller Cisco IOS 手札', 'Netkiller H3C 手札', 'Netkiller Multimedia 手札', 'Netkiller Perl 手札', 'Netkiller Amateur Radio 手札']
正则表达式
>>> response.css('title::text').re(r'Netkiller.*') ['Netkiller ebook - Linux ebook'] >>> response.css('title::text').re(r'N\w+') ['Netkiller'] >>> response.css('title::text').re(r'(\w+) (\w+)') ['Netkiller', 'ebook', 'Linux', 'ebook']
获取 html 属性
通过 a::attr() 可以获取 html 标记的属性值
>>> response.css('td a::attr(href)').extract_first() 'http://netkiller.github.io/'
14.3.1.5. xpath
>>> response.xpath('//title') [<Selector xpath='//title' data='<title>Netkiller ebook - Linux ebook</ti'>] >>> response.xpath('//title/text()').extract_first() 'Netkiller ebook - Linux ebook'
xpath 也可以使用 re() 方法做正则处理
>>> response.xpath('//title/text()').re(r'(\w+)') ['Netkiller', 'ebook', 'Linux', 'ebook'] >>> response.xpath('//div[@class="time"]/text()').re('[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}') ['2017-09-21 02:01:38']
抽取HTML属性值,如图片URL。
>>> response.xpath('//img/@src').extract() ['graphics/spacer.gif', 'graphics/note.gif', 'graphics/by-nc-sa.png', '/images/weixin.jpg', 'images/neo.jpg', '/images/weixin.jpg']
筛选 class
>>> response.xpath('//a/@href')[0].extract() 'http://netkiller.github.io/' >>> response.xpath('//a/text()')[0].extract() '简体中文' >>> response.xpath('//div[@class="blockquote"]')[1].css('a.ulink::text').extract() ['Netkiller Architect 手札', 'Netkiller Developer 手札', 'Netkiller PHP 手札', 'Netkiller Python 手札', 'Netkiller Testing 手札', 'Netkiller Java 手札', 'Netkiller Cryptography 手札', 'Netkiller Linux 手札', 'Netkiller FreeBSD 手札', 'Netkiller Shell 手札', 'Netkiller Security 手札', 'Netkiller Web 手札', 'Netkiller Monitoring 手札', 'Netkiller Storage 手札', 'Netkiller Mail 手札', 'Netkiller Docbook 手札', 'Netkiller Project 手札', 'Netkiller Database 手札', 'Netkiller PostgreSQL 手札', 'Netkiller MySQL 手札', 'Netkiller NoSQL 手札', 'Netkiller LDAP 手札', 'Netkiller Network 手札', 'Netkiller Cisco IOS 手札', 'Netkiller H3C 手札', 'Netkiller Multimedia 手札', 'Netkiller Perl 手札', 'Netkiller Amateur Radio 手札']
使用 | 匹配多组规则
>>> response.xpath('//ul[@class="topnews_nlist"]/li/h2/a/@href|//ul[@class="topnews_nlist"]/li/a/@href').extract()
14.3.1.6. headers
response.headers.getlist('Set-Cookie')
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论