Scrapy爬虫框架基本使用

Scrapy 一个开源和协作的框架

是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架。因此Scrapy使用了一种非阻塞(又名异步)的代码来实现并发。
整体架构如下:
在这里插入图片描述
在这里插入图片描述
应用Scrapy爬虫框架主要是编写配置型代码
产生步骤(1)
步骤1:建立一个Scrapy爬虫工程
scrapy startspider python123demp
步骤2:在工程中产生一个Scrapy爬虫
cd pythondemo123
scrapy genspider demo python123.io(作用:生成一个名为demo的spiders,即demo.py;python123.io为域名,仅爬取该域名以下的相关链接)
步骤3:配置产生的spider爬虫
即修改demo.py
步骤4:运行爬虫,获取网页
scrapy crawl demo(捕获内容存在demo.html中)

yield关键字 yield — 生成器

  • 生成器是一个不断产生值的函数
  • 包含yield语句的函数就是一个生成器
  • 生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值。

普通写法与生成器写法:
为何要有生成器?生成器相比一次列出所有内容的优势

  • 更节省存储空间
  • 响应更迅速
  • 使用更灵活

Scrapy爬虫的使用步骤
步骤1:创建一个工程和Spider模块
步骤2:编写Spider
步骤3:编写Item Pipeline
步骤4:优化配置策略

Scrapy爬虫的数据类型

Request类:代表向网络上请求的内容
class scrapy.http.Request()
Request对象表示一个HTTP请求
由Spider生成,由Downloader执行
Request构造器方法的参数列表:
Request(url [, callback=None, method=‘GET’, headers=None, body=None,cookies=None, meta=None, encoding=‘utf-8’, priority=0,dont_filter=False, errback=None, flags=None])
各参数说明:
url(必选)
请求页面的url地址,bytes或str类型。
callback
页面解析函数,Callback类型,Request请求对象的页面下载完成后,由该参数指定的页面解析函数解析页面,如果未传递该参数,默认调用Spider的parse方法。
method
HTTP请求的方法,默认为‘GET’。
headers
HTTP请求的头部字典,dict 类型。
body
HTTP请求的正文,bytes 或 str类型。
cookies
Cookie信息字典,dict 类型。
meta
Request 的元数据字典,dict 类型,用于给框架中其他组件传递信息,比如中间件 Item Pipeline。其他组件可以使用Request 对象的 meta 属性访问该元数据字典 (request.meta), 也用于给响应处理函数传递信息。
encoding
url 和 body 参数的编码默认为’utf-8’。如果传入的url或body参数是str 类型,就使用该参数进行编码。
priority
请求的优先级,默认值为0,优先级高的请求优先下载。
dont_filter
默认情况下(dont_filter=False),对同一个url地址多次提交下载请求,后面的请求会被去重过滤器过滤(避免重复下载)。如果将该参数置为True,可以使请求避免被过滤,强制下载。例如:在多次爬取一个内容随时间而变化的页面时(每次使用相同的url),可以将该参数设置为True。
errback
请求出现异常或出现HTTP错误时(如404页面不存在)的回调函数。

Response类:表示从网络中爬取内容的封装类
class scrapy.http.Response()
Response对象表示一个HTTP响应
由Downloader生成,由Spider处理
概念:
Response 对象用来描述一个HTTP响应,Response只是一个基类,根据响应内容的不同有如下子类:
TextResponse
HtmlResponse
XmlResponse
当一个页面下载完成时,下载器依据HTTP响应头部中的Content-Type信息创建某个Response的子类对象。通常一般是HtmlResponse子类。
HtmlResponse 对象的属性及方法:
url
HTTP 响应的url地址,str 类型。
status
HTTP 响应的状态码,int 类型。
headers
HTTP 响应的头部,dict 类型。可以调用get或getlist方法对其进行访问。
body
HTTP 响应正文,bytes 类型。
text
文本形式的HTTP响应正文,str 类型,它是由 response.body 使用 response.encoding 解码得到的。
response.text = response.body.decode(response.encoding)
encoding
HTTP 响应正文的编码,它的值可能是从HTTP响应头部或正文中解析出来的。
request
产生该HTTP 响应的Request对象。
meta
即 response.request.meta, 在构造 Request对象时,可将要传递给响应处理函数的信息通过meta参数传入;响应处理函数处理响应时,通过response.meta 将信息取出。
selector
Selector 对象用于在Response 中提取数据。
xpath(query)
使用XPath选择器在Response中提取数据;它是 response.selector.xpath 方法的快捷方式。
css(query)
使用 CSS选择器在Response中提取数据;它是 response.selector.css方法的快捷方式。
urljoin (url)
用于构造绝对 url 。当传入的url参数是一个相对地址时,根据response.url 计算出相应的绝对 url。

Item类:由SPIDERS产生的信息封装的类
class scrapy.item.Item()
Item对象表示一个从HTML页面中提取的信息内容
由Spider生成,由Item Pipeline处理
Item类似字典类型,可按照字典类型操作

发布了28 篇原创文章 · 获赞 3 · 访问量 943

猜你喜欢

转载自blog.csdn.net/weixin_43273005/article/details/96763400