Python 网络爬虫笔记10 -- Scrapy 使用入门

版权声明: https://blog.csdn.net/Wang_Jiankun/article/details/83787816

Python 网络爬虫笔记10 – Scrapy 使用入门


Python 网络爬虫系列笔记是笔者在学习嵩天老师的《Python网络爬虫与信息提取》课程及笔者实践网络爬虫的笔记。

课程链接:Python网络爬虫与信息提取
参考文档:
Requests 官方文档(英文)
Requests 官方文档(中文)
Beautiful Soup 官方文档
re 官方文档
Scrapy 官方文档(英文)
Scrapy 官方文档(中文)


一、Scrapy 使用简化步骤


1、建立一个 Scrapy 爬虫工程

# 打开 cmd ,cd到要创建工程的目录,输入命令
scrapy startproject scrapy_demo

工程的文件结构:

scrapy_demo/					# 工程根目录
	scrapy.cfg					# 部署Scrapy爬虫的配置文件
	scrapy_demo/				# Scrapy框架的用户自定义Python代码
		__pycache__/			# 缓存目录,无需修改
		spiders/				# piders代码模板目录(继承类),此目录下可添加自定义的spider代码
			__init__.py			# 初始文件,无需修改
			__pycache__/		# 缓存目录,无需修改
		__init__.py				# 初始化脚本
		items.py				# Items代码模板(继承类)
		middlewares.py			# Middlewares代码模板(继承类)
		pipelines.py			# Pipelines代码模板(继承类)
		settings.py				# Scrapy爬虫的配置文件

2、在工程中产生一个Scrapy爬虫

作用:

  • 生成一个名称为demo的spider
  • 在 spiders 目录下增加代码文件 demo.py
  • 该命令仅用于生成 demo.py,该文件也可以手工生成
# 打开 cmd ,cd到 Scrapy工程的目录,输入命令(爬取的网站网址为可选参数)
scrapy  genspider demo python123.io

自动生成的 demo.py

# -*- coding: utf-8 -*-
import scrapy

class DemoSpider(scrapy.Spider):
    name = 'demo'
    allowed_domains = ['python123.io']
    start_urls = ['http://python123.io/ws/demo.html']

	# 处理响应,解析由Downloader生成Response对象
    def parse(self, response):
        pass

3、配置产生的spider爬虫

配置内容:

  • 设置初始URL地址
  • 编写获取页面后的解析方法

修改后的 demo.py(普通版):

# -*- coding: utf-8 -*-
import scrapy

class DemoSpider(scrapy.Spider):
    """
    普通版
    """
    name = 'demo'
    # allowed_domains = ['python123.io']
    start_urls = ['http://python123.io/ws/demo.html']
	
	# 解析Response对象,保存HTML文件
    def parse(self, response):
        file_name = response.url.split('/')[-1]
        with open(file_name, 'wb') as f:
            f.write(response.body)
        self.log('Saved file %s.' % file_name)

修改后的 demo.py(yield版):

# -*- coding: utf-8 -*-
import scrapy

class DemoSpider(scrapy.Spider):
    """
    yield 版
    """
    name = 'demo'
    
    def start_requests(self):
        urls = ['http://python123.io/ws/demo.html']
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        file_name = response.url.split('/')[-1]
        with open(file_name, 'wb') as f:
            f.write(response.body)
        self.log('Saved file %s.' % file_name)

4、运行爬虫,获取网页

# 打开 cmd ,cd到 Scrapy工程的目录,输入命令
scrapy crawl demo

二、Scrapy 使用标准步骤


  1. 创建一个工程和Spider模板
  2. 编写Spider编写Spider
  3. 编写Item Pipeline编写Item Pipeline
  4. 优化配置策略优化配置策略

三、Scrapy 数据类型


1、Request 类:class scrapy.http.Request()

  • Request对象表示一个HTTP请求,由Spider生成,由Downloader执行
属性或方法 说明
.url Request对应的请求URL地址
.method 对应的请求方法,‘GET’ 'POST’等
.headers 字典类型风格的请求头
.body 请求内容主体,字符串类型
.meta 用户添加的扩展信息,在Scrapy内部模块间传递信息使用
.copy() 复制该请求

2、Response 类:class scrapy.http.Response()

  • Response对象表示一个HTTP响应,由Downloader生成,由Spider处理
属性或方法 说明
.url Response对应的URL地址
.status HTTP状态码,默认是200
.headers Response对应的头部信息
.body Response对应的内容信息,字符串类型
.flags 一组标记
.request 产生Response类型对应的Request对象
.copy() 复制该响应

3、Item 类:class scrapy.item.Item()

  • Item对象表示一个从HTML页面中提取的信息内容,由Spider生成,由Item Pipeline处理
  • Item类似字典类型,可以按照字典类型操作

四、CSS Selector


  • 用来检索HTML网页的内容
# 格式
<HTML>.css('标签名称::attr(标签属性)').extract()

# 示例
<HTML>.css('a::attr(href)').extract()

猜你喜欢

转载自blog.csdn.net/Wang_Jiankun/article/details/83787816