Python spider (六) Scrapy 中间件 获取新闻

前言:Scrapy因为请求到的都是静态的数据,动态数据无法获取,拿应该怎么解决呢?

1.获取新闻的第一步

解析静态网址

在这里插入图片描述
根据抓包可以查看是否是静态数据,根据固定的数据进行解析

2.使用selenium+中间件完成动态数据的解析

提示:chromedriver.exe文件需要到官网中查看对应的浏览器版本进行操作

# 在spider文件中
# 开启浏览器
 def __init__(self):
        self.bro = webdriver.Chrome(executable_path='D:\PY\chromedriver.exe')
# 在结束的时候关闭浏览器
 def closed(self, spider):
        self.bro.quit()
  • 结合 middlewares.py,对于数据返回值进行拦截:
   # 4.通过中间件完成动态数据的获取
    def process_response(self, request, response, spider):
        bro = spider.bro
        # modules_url 是spider文件中添加的新闻网页数据,如果请求来自其中,则进行拦截返回客户端动态数据
        if request.url in spider.modules_url:
            bro.get(request.url)
            # 动态数据返回
            page_text = bro.page_source
            n_response = HtmlResponse(url=request.url, body=page_text, encoding='utf-8', request=request)
            return n_response
        else:
            return response

3.获取详情数据之后,开启管道持久化数据

 fp = None

    def open_spider(self, spider):
        print("开始爬虫")
        # 需要使用全局变量赋值
        self.fp = open('./news163item.txt', 'w', encoding='utf-8')

    def process_item(self, item, spider):
        # 3. 解析管道数据
        title = item['title']
        content = item['content']

        content = title + "\n" + content
        self.fp.write(content)
        # 4.开启管道
        return item

    def close_spider(self, spider):
        print("结束爬虫")
        self.fp.close()
  • 配置文件settings中都需要开启:
DOWNLOADER_MIDDLEWARES = {
   'News163Item.middlewares.News163ItemDownloaderMiddleware': 543,
}

ITEM_PIPELINES = {
   'News163Item.pipelines.News163ItemPipeline': 300,
}

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Safari/537.36'

ROBOTSTXT_OBEY = False

LOG_LEVEL = 'ERROR'

最终获取结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值