发布于2020-02-24 23:00 阅读(1038) 评论(0) 点赞(3) 收藏(3)
即使有了两次经验,还是遏制不住我的憨:安装Scrapy这边请
今天来看
Scrapy是一个功能强大且迅捷的网络爬虫框架
要注意喽,scrapy不是一个函数功能库,而是一个爬虫框架
在Scrapy爬虫框架中,
用户需要自主编写
相同点:
不同点:
Requests | Scrapy |
---|---|
页面级爬虫 | 网站级爬虫 |
功能库 | 框架 |
并发性考虑不足,性能较差 | 并发性好,性能较高 |
重点在于页面下载 | 重点在于爬虫结构 |
定制灵活 | 一般定制灵活,深度定制困难 |
入门简单 | 入门稍难 |
技术路线选取准则:
Scrapy是为持续运行设计的专业爬虫框架,提供操作的Scrapy命令行
Scrapy命令行格式:
命令 | 说明 | 格式 |
---|---|---|
startproject | 创建一个新工程 | scrapy startproject < name > [dir] |
genspider | 创建一个爬虫 | scrapy genspider [options] < name > < domain > |
settings | 获得爬虫配置信息 | scrapy settings [options] |
crawl | 运行一个爬虫 | scrapy crawl < spider > |
list | 列出工程中的所有爬虫 | scrapy list |
shell | 启动URL调试命令行 | scrapy shell [url] |
C_T丢给你一个链接,如果不太明白就请教前辈吧~
在这个实例中,我们还是访问这个网站:http://python123.io/
在你觉得舒服的路径下新建一个文件夹,在该文件夹下输入cmd指令
scrapy startproject python123demo
之后我们就可以在对应的路径下看到新项目文件了
python123demo/ ----> 外层目录
scrapy.cfg ----> 部署Scrapy爬虫的配置文件
python123demo/ ----> Scrapy框架的用户自定义Python代码
__init__.py ----> 初始化脚本
items.py ----> Items代码模板(继承类)
middlewares.py ----> Middlewares代码模板(继承类)
pipelines.py ----> Pipielines代码模板(继承类)
settings.py ----> Scrapy爬虫的配置文件
spiders/ ----> Spiders代码模板目录(继承类)
__init__.py ----> 初始文件,无需修改
__pycache__/ ----> 缓存目录,无需修改
python123demo> scrapy genspider demo python123.io
这条命令的作用是生成一个名叫demo的Spider
打开spider文件夹中的demo.py查看一下:
# demo.py
# -*- coding: utf-8 -*-
import scrapy
class DemoSpider(scrapy.Spider):
name = 'demo'
allowed_domains = ['python123.io']
start_urls = ['http://python123.io/']
def parse(self, response):
pass
parse()用于处理响应,解析内容形成字典,发现新的URL爬取请求,需要我们自己编写
修改demo.py:
# demo.py
# -*- coding: utf-8 -*-
import scrapy
class DemoSpider(scrapy.Spider):
name = 'demo'
start_urls = ['http://python123.io/ws/demo.html']
def parse(self, response):
fname = response.url.split('/')[-1]
with open(fname , 'wb') as f:
f.write(response.body)
self.log('Saved file %s.' % fname)
python123demo> scrapy crawl demo
生成器写法:
def square(n):
for i in range(n):
yield i**2
在调用square函数时,当程序运行到yield语句,程序会被冻结,yield语句这一行得到的值会被返回出来
生成器和循环是最好搭档:
def square(n):
for i in range(n):
yield i**2
for i in square(5):
print(i," ",end="")
### Output
0 1 4 9 16
上面是生成器写法,而普通写法是这样的:
def square(n):
ls = [i**2 for i in range(n)]
return ls
for i in square(5):
print(i," ",end="")
### Output
0 1 4 9 16
步骤一:创建一个工程和Spider模板
步骤二:编写Spider
步骤三:编写Item Pipelines
步骤四:优化配置
Request类:向网络提交请求的内容
Response类:从网络上爬取内容的封装类
Item类:由Spider产生的信息的封装类
属性或方法 | 说明 |
---|---|
.url | Request对应的请求URL地址 |
.method | 对应的请求方法,’ GET ’ ’ POST ’ 等 |
.headers | 字典类型风格的请求头 |
.body | 请求内容主体,字符串类型 |
.meta | 用户添加的扩展信息,在Scrapy内部模块见传递信息使用 |
.copy() | 复制该请求 |
属性或方法 | 说明 |
---|---|
.url | Response对应的请求URL地址 |
.status | HTTP状态码,默认是200 |
.headers | Response对应的头部信息 |
.body | Response对应的内容信息,字符串类型 |
.flags | 一组标记 |
.request | 产生Response类型对应的Request对象 |
.copy() | 复制该响应 |
Scrapy爬虫支持多种HTML信息提取方法
作者:mimi
链接:https://www.pythonheidong.com/blog/article/232717/4d77d28d4e3d549e9f26/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!