Python-Scrapy框架Debug模式错误记录

文章讲述了在Scrapy爬虫项目中遇到的断点调试问题,尽管无法在Python3.8.19的环境中正常debug,但可以运行。解决方法包括在调度器接收yieldRequest前添加断点并手动注入案例,以及考虑升级到支持的PyCharm版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

scrapy 框架里断点无法使用 debug 但是可以 run 的情况;

情景条件

- 爬虫 scrapy 项目代码无法正常 debug 调试, 但是可以正常运行
- Python 3.8.19 \ scrapy 2.11.1 \ twisted 23.04.0

问题点

[asyncio] ERROR: Exception in callback <Task pending name='Task-1' coro=<SpiderMiddlewareManager.scrape_response.<locals>.process_callback_output() running at C:\Users\<MyComputerName>\.conda\envs\dcg-spider-data\lib\site-packages\scrapy\core\spidermw.py:295> cb=[Deferred.fromFuture.<locals>.adapt() at C:\Users\<MyComputerName>\.conda\envs\dcg-spider-data\lib\site-packages\twisted\internet\defer.py:1063]>()
handle: <Handle <Task pending name='Task-1' coro=<SpiderMiddlewareManager.scrape_response.<locals>.process_callback_output() running at C:\Users\<MyComputerName>\.conda\envs\dcg-spider-data\lib\site-packages\scrapy\core\spidermw.py:295> cb=[Deferred.fromFuture.<locals>.adapt() at C:\Users\<MyComputerName>\.conda\envs\dcg-spider-data\lib\site-packages\twisted\internet\defer.py:1063]>()>
Traceback (most recent call last):
  File "C:\Users\<MyComputerName>\.conda\envs\dcg-spider-data\lib\asyncio\events.py", line 81, in _run
    self._context.run(self._callback, *self._args)
TypeError: 'Task' object is not callable

解决方案

1. 在 scrapy 调度器接收 yield Request 请求前进行断点, 并在 console 控制台手动注入任意案件获取当前的异步事件
2. 更换 idea 执行器 Pycharm 版本
### 使用 Python Scrapy 爬虫抓取数据存入数据库并使用 Flask 实现数据可视化 #### 构建 Scrapy 爬虫项目 为了构建一个能够高效工作的Scrapy爬虫,需要理解其内部工作原理和配置方式[^1]。创建一个新的Scrapy项目可以通过命令行工具完成: ```bash scrapy startproject weibo_scraper cd weibo_scraper ``` 定义目标URL模式以及解析函数,在`spiders`目录下新建Python文件用于编写具体的爬虫逻辑。 #### 解析网页内容获取所需链接 针对特定结构化HTML文档中的元素定位与提取操作至关重要。例如对于包含精灵信息列表的情况,可以采用BeautifulSoup库辅助处理复杂DOM树节点关系,并利用正则表达式匹配符合条件的超链接地址[^2]: ```python import re from bs4 import BeautifulSoup def parse(soup): for i in soup.find_all('ul', id="cwdz_list"): newurls = re.findall('<a href="/luoke/luokechongwu/(.*?).html">', str(i)) return newurls ``` 此部分代码展示了如何从指定位置读取出所有子页面链接供后续请求调用。 #### 将抓取的数据保存至数据库 当成功收集到有效数据后,则需考虑持久化的方案。这里推荐使用SQLAlchemy作为ORM映射层连接MySQL或其他类型的RDBMS系统。首先安装必要的依赖包: ```bash pip install sqlalchemy pymysql ``` 接着修改settings.py设置项以适应新的Pipeline类路径;随后自定义pipeline.py实现Item Pipeline接口方法来负责实际写入动作。 ```python # settings.py ITEM_PIPELINES = { 'weibo_scraper.pipelines.DatabasePipeline': 300, } # pipelines.py from sqlalchemy.orm import sessionmaker from .models import Base, create_engine, WeiboData class DatabasePipeline(object): def __init__(self): engine = create_engine('mysql+pymysql://username:password@localhost/dbname') self.Session = sessionmaker(bind=engine) def process_item(self, item, spider): session = self.Session() data_entry = WeiboData( field_name=item['field'], ... ) try: session.add(data_entry) session.commit() except Exception as e: print(f"Error occurred while saving to DB {e}") session.rollback() finally: session.close() return item ``` 上述示例中假设已经存在名为WeiboData的表模型用来表示微博条目记录。 #### 利用Flask展示已存储的信息 最后一步便是搭建Web应用界面以便于查看最终成果。启动虚拟环境并引入flask扩展组件: ```bash pip install flask pandas matplotlib seaborn ``` 设计简单的路由控制器响应HTTP GET请求返回JSON格式的结果集或者渲染模板生成图表视图。 ```python from flask import Flask, jsonify, render_template_string app = Flask(__name__) @app.route('/api/data') def get_data(): # Query database and convert result into JSON serializable format. pass @app.route('/') def index(): template = ''' <h1>Weibo Data Visualization</h1> <!-- Insert your visualization code here --> ''' return render_template_string(template) if __name__ == '__main__': app.run(debug=True) ``` 通过以上步骤即可建立起完整的端到端解决方案链路——从网络资源采集直至图形化呈现给终端用户浏览分析。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值