python爬虫scrapy的使用

python爬虫scrapy的使用

一、scrapy架构的组成

  1. 引擎:自动运行,不需要关注,会自动组织所有的请求对象,分发给下载器;
  2. 下载器:从引擎处获取到请求对象后,请求数据;
  3. spiders:Spider类定义了如何爬取某些网站;
  4. 调度器:有自己的调度规则,不需要关注;
  5. 中间件:下载中间件、Spider中间件;
  6. 管道:最终处理数据的管道,会预留接口供我们处理数据。当Item在Spider中被收集后,将会被传递给Item Pipeline,一些组件会按照一定的顺序执行对Item的处理。每个Item Pipeline组件是实现了简单方法的Python类,收到Item后执行一些操作,也决定这个Item是否继续通过Pipeline或是被丢弃。

二、scrapy工作原理

  1. 当爬虫(Spider)要爬取某URL地址的页面时,使用该URL初始化Request对象提交给引擎(Scrapy Engine),并设置回调函数。爬虫中初始的Request是通过调用start_requests()来获取的,读取start_urls中的URL并使用parse为回调函数生成Request。
  2. Request对象进入调度器(Scheduler)按某种算法进行排队,之后的每个时刻调度器将其出列,送往下载器。
  3. 下载器(Downloader)根据Request对象中的URL地址发送一次HTTP请求到网络服务器把资源下载下来,并封装成应答包(Response)。
  4. 应答包Response对象最终会被传递给爬虫的页面解析函数进行处理。
  5. 若是解析出来实体(Item),则交给实体管道(Item Pipeline)进一步处理。由Spider返回的Item将被存到数据库或使用Feed exports存入到文件中。
  6. 若是解析出的是链接(URL),则把链接给交调度器等待抓取。

三、scrapy爬取百度热搜

  1. 创建爬虫项目baidu_hot_bot

scrapy startproject baidu_hot_bot

  1. 创建爬虫hot_bot

scrapy genspider hot_bot www.baidu.com

(1)在setting.py中添加配置

# 配置请求头中的User-Agent
USER_AGENT = '从浏览器请求中获取'
# 配置不遵守robots协议
ROBOTSTXT_OBEY = False
# 只有在错误的情况下才显示日志文件
LOG_LEVEL = 'ERROR'

(2)管道文件pipelines.py用于处理下载数据的后续处理

# 使用一个接口处理不同类型的实体
from itemadapter import ItemAdapter

class BaiduHotBotPipeline:
    class process_item(self, item, spider):
        return item

(3)在爬虫hot_bot.py中编写爬虫

import scrapy

class HotBotSpider(scrapy.Spider):
    name = 'hot_bot' # 爬虫名称
    # 允许的域名:限定的start_urls列表中那些url可以发送请求,可以不用指定
    # allowed_domains = ['www.baidu.com']
    # 起始url列表:scrapy自动对列表中的每个url发起请求
    start_urls = ['https://www.baidu.com/']
    # 当scrapy自动向url列表中每个url发出请求后,response保存响应结果,
    # response.body响应的是二进制文件,response.text响应的是字符串,
    # repsponse.xpath()是xpath方法的返回值类型是selector列表
	def parse(self, response):
        hots = response.xpath('//ul[@id="hotsearch-content-wrapper"]/li')
        for hot in hots:
            contents = hot.xpath("./a//span[@class='title-content-title']//text()").extract()
            title = "".join(contents)
            print(title)
  1. 执行爬虫文件

scrapy crawl hot_bot

你可能感兴趣的:(python,python,爬虫,scrapy)