知行迭代
导航
首页
最近更改
随机页面
常用
分类目录
Linux命令
Mediawiki常用
电脑技巧
工具
链入页面
相关更改
特殊页面
页面信息
登录
查看“Scrapy”的源代码
←
Scrapy
页面
讨论
阅读
查看源代码
查看历史
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:[
[1]
]
您可以查看和复制此页面的源代码。
Scrapy 是一个开源的[[网络爬虫]]框架。 ==简介== ===时间轴=== ==快速入门== ===架构=== {{#drawio:Scrapy架构}} {{了解更多 |[https://docs.scrapy.org/en/latest/topics/architecture.html Scrapy 文档:Architecture overview] }} ==选择器== Scrapy支持使用[[XPath]]或[[CSS]]进行选择。其中CSS选择器底层也转为XPath来实现。可以使用<code>scrapy shell</code>来进行交互式测试选取。 {{了解更多 |[https://docs.scrapy.org/en/latest/topics/selectors.html Scrapy 文档:selectors ] }} === 选择器生成 === 选择器可以嵌套使用。 {| class="wikitable" ! 名称 ! 描述 ! 示例 |- | response.selector.xpath() | 简写<code>response.xpath()</code> | <code>response.xpath("//span/text()")</code> <br /><code>response.css("img").xpath("@src")</code>选择所有含有src属性的img |- | response.selector.css() | 简写<code>response.css()</code> |<code>response.css("span::text")</code> |} === 选择器属性方法 === {| class="wikitable" ! 名称 ! 描述 ! 示例 |- | get() | 提取匹配第一个的数据,没有返回None,等同于之前版本的<code>extract_first()</code>。 | <code>response.xpath("//title/text()").get()</code>返回标题,没有返回None。 <br /><code>response.xpath("//title/text()").get().get(default="默认值")</code>返回标题,没有返回“默认值”。 |- | getall() | 返回列表,所有匹配元素的数据。等同于之前版本的<code>extract()</code>。 | <code>response.css("img").xpath("@src").getall()</code> |- |attrib | 返回匹配元素的属性,当用于列表上,返回第一个元素的属性。 | <code>response.css("img").attrib["src"]</code> <br /><code>response.css("img").attrib["src"]</code> |} {{了解更多 |[https://docs.scrapy.org/en/latest/topics/selectors.html Scrapy 文档:selectors ] }} ==蜘蛛== ==项目管道== 当蜘蛛抓取到item后,会发送到项目管道(Item Pipeline),按项目管道设置的值,按从小到大依次进入不同管道处理。项目管道的典型用途包括: * 清理 HTML 数据 * 验证抓取的数据(检查项目是否包含某些字段) * 检查重复项(并删除它们) * 将抓取的项目存储在数据库中 {{了解更多 |[https://docs.scrapy.org/en/latest/topics/item-pipeline.html Scrapy 文档: Item Pipeline] }} === 编写项目管道 === === 图片下载 === ==== 内置下载管道 ==== 可以使用内置的ImagesPipeline方便下载图片,它会自动处理下载item中image_urls图片链接。 * 1.在项目settings中开启ImagesPipeline管道。 <syntaxhighlight lang="python" > ITEM_PIPELINES = { "scrapy.pipelines.images.ImagesPipeline": 1, } # 设置图片下载路径,绝对路径或相对路径 IMAGES_STORE = "images" </syntaxhighlight> * 2.爬取图片链接,返回给引擎。 <syntaxhighlight lang="python" > import scrapy # 可以放入item.py 再导入 class Product(scrapy.Item): product_name = scrapy.Field() image_urls = scrapy.Field() #images = scrapy.Field() # 记录存储位置文件名信息等 class ProductSpider(scrapy.Spider): name = 'sample' start_urls = ["https://exsample.com"] # 也可以为这爬虫设置自定义存储位置。 #custom_settings = { # 'IMAGES_STORE': 'images/sample' #} def parse(self, response): item = Product() item['product_name'] = response.xpath('//h1[@class="title"]/text()').get() item['image_urls'] = response.xpath('//img[@class="product-img"]/@src').get() yield item ## 在图片下载完成后被调用,将图片存储地址等保存到item中。 # def item_completed(self, results, item, info): # for success, image_info in results: # if success: # item['images'] = [{'url': image_info['url'], 'path': image_info['path']}] # return item </syntaxhighlight> 3.启动爬虫 <syntaxhighlight lang="sh" > scrapy crawl sample # 启动爬虫,并将item存储到sample.json # scrapy crawl sample -o sample.json </syntaxhighlight> {{了解更多 |[https://docs.scrapy.org/en/latest/topics/media-pipeline.html Scrapy 文档:文件和图片的下载处理] }} ==== 自定义下载管道 ==== === 文件下载 === ==== 内置下载管道 ==== {{了解更多 |[https://docs.scrapy.org/en/latest/topics/media-pipeline.html Scrapy 文档:文件和图片的下载处理] }} ==下载器== == 脚本测试 == === scrapy shell === 在终端运行,爬取网站,交互式运行。 <syntaxhighlight lang="bash" > scrapy shell https://www.example.com </syntaxhighlight> 接下来,就可以输入测试,如: <syntaxhighlight lang="python" > response.xpath("//a[contains(@class,'item')]") </syntaxhighlight> {{了解更多 |[https://docs.scrapy.org/en/latest/topics/shell.html Scrapy 文档:Scrapy shell] }} === Jupyter中 === 如果要测试提取数据,可以使用[[requests]],再用scrapy的TextResponse解析。 <syntaxhighlight lang="python" > import requests from scrapy.http import TextResponse url = "https://www.example.com" r = requests.get(url) response = TextResponse(r.url,body=r.text,encoding="utf-8") response.xpath('//title') </syntaxhighlight> {{了解更多 |[https://docs.scrapy.org/en/latest/topics/request-response.html#textresponse-objects Scrapy 文档:Requests and Responses ] }} === 脚本运行 === 一般使用<code>scrapy crawl</code>命令运行爬虫,也可以从脚本运行。 <syntaxhighlight lang="python" > import scrapy from scrapy.crawler import CrawlerProcess class MySpider(scrapy.Spider): # Your spider definition ... process = CrawlerProcess( settings={ "FEEDS": { "items.json": {"format": "json"}, }, } ) process.crawl(MySpider) process.start() # the script will block here until the crawling is finished </syntaxhighlight> {{了解更多 |[https://docs.scrapy.org/en/latest/topics/practices.html#run-scrapy-from-a-script Scrapy 文档:从脚本运行 Scrapy] }} ==资源== ===官网=== *Scrapy 官网:https://scrapy.org/ *Scrapy 文档:https://docs.scrapy.org/ *Scrapy 源代码:https://github.com/scrapy/scrapy ===网站===
本页使用的模板:
模板:了解更多
(
查看源代码
)
返回至“
Scrapy
”。