Python spider Scrapy 中间件 获取新闻
Posted Adorable_Rocy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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'
最终获取结果
以上是关于Python spider Scrapy 中间件 获取新闻的主要内容,如果未能解决你的问题,请参考以下文章
Python爬虫编程思想(159):Scrapy中的爬虫中间件
Python爬虫编程思想(159):Scrapy中的爬虫中间件
Python爬虫编程思想(159):Scrapy中的爬虫中间件