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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐江小鱼

知识创造财富,期待您的慷慨解囊

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值