Scrapy框架
官网概念
Scrapy 是一个强大的 Python 网络爬虫框架。
最新版本学习
安装
pip install scrapy
使用
# 创建名称为myscrapy的爬虫项目
scrapy starpoject myscrapy
# 创建爬那个 就是比如 需要爬http://quotes.toscrape.com 运行的名称:toscrape运行的网址:http://quotes.toscrape.com
cd myscrapy/myscrapy/spider
scrapy genspider toscrape http://quotes.toscrape.com
# 运行cd到spiders目录下执行
scrapy crawl toscrape
常见命令
命令 | 使用 -h(或者--help) 查看帮助示例 | 描述 |
---|---|---|
scrapy | scrapy -h | 查看所有可用的Scrapy命令 |
scrapy startproject | scrapy startproject -h | 创建一个新的Scrapy项目 |
scrapy genspider | scrapy genspider -h | 在当前项目中生成一个新的爬虫 |
scrapy crawl | scrapy crawl -h | 运行一个爬虫 |
scrapy check | scrapy check -h | 检查爬虫代码是否有错误 |
scrapy list | scrapy list -h | 列出当前项目中所有可用的爬虫 |
scrapy edit | scrapy edit -h | 在编辑器中编辑爬虫(需配置EDITOR 环境变量) |
scrapy fetch | scrapy fetch -h | 使用Scrapy下载器下载URL,并输出内容 |
scrapy view | scrapy view -h | 在浏览器中打开URL,查看Scrapy如何识别它 |
scrapy shell | scrapy shell -h | 启动Scrapy shell,用于调试和测试选择器 |
scrapy parse | scrapy parse -h | 解析给定的URL并使用处理它的爬虫 |
scrapy settings | scrapy settings -h | 获取Scrapy设置的值 |
scrapy runspider | scrapy runspider -h | 运行一个独立的爬虫Python文件,而无需创建项目 |
scrapy version | scrapy version -h | 显示Scrapy版本,结合-v 显示可用的Python、Twisted和平台信息 |
scrapy bench | scrapy bench -h | 运行基准测试(需安装scrapy-bench ) |
示例
import scrapy
class ToscrapeSpider(scrapy.Spider):
name = "toscrape"
allowed_domains = ["quotes.toscrape.com"]
start_urls = [
'http://quotes.toscrape.com/page/1/',
'http://quotes.toscrape.com/page/2/',
]
def parse(self, response):
print("hello world")
page = response.url.split("/")[-2]
filename = f'quotes-{page}.html'
with open(filename, 'wb') as f:
f.write(response.body)
项目结构
myscrapy/
scrapy.cfg # 部署配置文件
myscrapy/ # 项目的Python模块,您将从这里导入代码
__init__.py
items.py # 项目定义文件
middlewares.py # 项目中间件文件
pipelines.py # 项目管道文件
settings.py # 项目设置文件
spiders/ # 放置蜘蛛的目录
__init__.py
toscrape.py # 爬虫实际执行文件 从这里执行 scrapy crawl toscrape
scrapy shell
官网概念:scrappyshell是一个交互式shell,您可以在其中快速调试 scrape 代码,而不必运行spider。它本来是用来测试数据提取代码的,但实际上您可以使用它来测试任何类型的代码,因为它也是一个常规的Python外壳。
配置
在scrapy.cfg下配置
[settings]
shell = bpython
常用方法
命令/方法 | 说明 | 示例 |
---|---|---|
scrapy shell <url> | 启动Scrapy Shell并自动下载URL,生成response 对象 | scrapy shell "https://example.com" |
fetch(url) | 在Shell中重新下载指定URL,更新response 对象(需先启动Shell) | fetch("https://example.com/page2") |
response.css() / .xpath() | 用CSS/XPath选择器提取数据(最常用) | response.css("h1::text").get() |
.get() / .getall() | 提取单个结果(字符串)或所有结果(列表) | response.xpath("//a/@href").getall() |
view(response) | 在浏览器中打开当前response ,检查页面渲染效果 | view(response) |
response.url / .status | 查看当前响应的URL和HTTP状态码 | print(response.status) |
request.headers | 查看请求头信息(用于调试反爬) | print(request.headers) |
shelp() | 查看Shell内置帮助(列出所有可用对象和函数) | shelp() |
vars() | 查看当前Shell的全局变量(如response , request , crawler ) | vars() |
from scrapy import Selector | 手动创建Selector对象解析文本(非实时请求时使用) |
|
exit() | 退出 | exit() |