Scrapy 爬虫 使用指南 完全教程

scrapy note command 全局命令:

startproject :在 project_name 文件夹下创建一个名为 project_name 的Scrapy项目。

scrapy startproject myproject

settings:在项目中运行时,该命令将会输出项目的设定值,否则输出Scrapy默认设定。

runspider:在未创建项目的情况下,运行一个编写在Python文件中的spider。

shell:以给定的URL(如果给出)或者空(没有给出URL)启动Scrapy shell。

fetch:使用Scrapy下载器(downloader)下载给定的URL,并将获取到的内容送到标准输出。

scrapy fetch --nolog --headers http://www.example.com/

view:在浏览器中打开给定的URL,并以Scrapy spider获取到的形式展现。

scrapy view http://www.example.com/some/page.html

version:输出Scrapy版本。

项目(Project-only)命令:

crawl:使用spider进行爬取。

scrapy crawl myspider

check:运行contract检查。

scrapy check -l

list:列出当前项目中所有可用的spider。每行输出一个spider。
edit

parse:获取给定的URL并使用相应的spider分析处理。如果您提供 --callback 选项,则使用spider的该方法处理,否则使用 parse 。

--spider=SPIDER: 跳过自动检测spider并强制使用特定的spider --a NAME=VALUE: 设置spider的参数(可能被重复) --callback or -c: spider中用于解析返回(response)的回调函数 --pipelines: 在pipeline中处理item --rules or -r: 使用 CrawlSpider 规则来发现用来解析返回(response)的回调函数 --noitems: 不显示爬取到的item --nolinks: 不显示提取到的链接 --nocolour: 避免使用pygments对输出着色 --depth or -d: 指定跟进链接请求的层次数(默认: 1) --verbose or -v: 显示每个请求的详细信息 scrapy parse http://www.example.com/ -c parse_item

genspider:在当前项目中创建spider。

scrapy genspider [-t template] <name> <domain> scrapy genspider -t basic example example.com

deploy:将项目部署到Scrapyd服务。

bench:运行benchmark测试。

使用选择器(selectors) body = '<html><body><span>good</span></body></html>' Selector(text=body).xpath('//span/text()').extract() response = HtmlResponse(url='http://example.com', body=body) Selector(response=response).xpath('//span/text()').extract()

Scrapy提供了两个实用的快捷方式: response.xpath() 及 response.css()

>>>response.xpath('//base/@href').extract() >>>response.css('base::attr(href)').extract() >>>response.xpath('//a[contains(@href, "image")]/@href').extract() >>>response.css('a[href*=image]::attr(href)').extract() >>>response.xpath('//a[contains(@href, "image")]/img/@src').extract() >>>response.css('a[href*=image] img::attr(src)').extract()

嵌套选择器(selectors)

选择器方法( .xpath() or .css() )返回相同类型的选择器列表,因此你也可以对这些选择器调用选择器方法。下面是一个例子:

links = response.xpath('//a[contains(@href, "image")]') for index, link in enumerate(links): args = (index, link.xpath('@href').extract(), link.xpath('img/@src').extract()) print 'Link number %d points to url %s and image %s' % args 结合正则表达式使用选择器(selectors)

Selector 也有一个 .re() 方法,用来通过正则表达式来提取数据。然而,不同于使用 .xpath() 或者 .css() 方法, .re() 方法返回unicode字符串的列表。所以你无法构造嵌套式的 .re() 调用。

>>> response.xpath('//a[contains(@href, "image")]/text()').re(r'Name:\s*(.*)') 使用相对XPaths

>>>for p in divs.xpath('//p'): # this is wrong - gets all <p> from the whole document ... print p.extract() >>>for p in divs.xpath('.//p'): # extracts all <p> inside ... print p.extract() >>>for p in divs.xpath('p'): #gets all <p> from the whole document ... print p.extract()

例如在XPath的 starts-with() 或 contains() 无法满足需求时, test() 函数可以非常有用。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5ba79f84ad89114534c6c13e0697f29e.html