pycharm写scrapy遇到的问题

news2024/11/18 10:48:58

目录

  • 背景
  • 创建scrapy
  • 难受的开始
  • 指定类型
  • 修改模板并指定使用
  • 运行scrapy

背景

居然还有万能的pycharm解决不了的python程序???

创建scrapy

由于PyCharm中没有直接创建Scrapy项目的选项,所以使用命令行创建一个项目

安装scrapy

pip install scrapy

查看版本
能看版本就是安装成功

scrapy version

在这里插入图片描述

创建一个scrapy项目

scrapy startproject yourprojectname

在这里插入图片描述

根据提示创建爬虫

cd asd
scrapy genspider example example.com

这样就创建成功了
在这里插入图片描述

难受的开始

使用PyCharm打开这个项目,却发现爬虫中的parse函数是灰色的框
在这里插入图片描述

Signature of method 'ExampleSpider.parse()' does not match signature of the base method in class 'Spider'

看一下父类中的parse函数是如何定义的,因为我们是重写父类的方法,在pycharm点这个就行了
在这里插入图片描述

进到父类可以看到有一个**kwargs参数
在这里插入图片描述

**kwargs参数加入到自己的爬虫的parse上面去,灰框就不见了,总算看着不难受了
在这里插入图片描述

指定类型

但是还有一个问题,灰框只是看着难受,没有代码提示才是真的难受,.不出来谁懂啊
在这里插入图片描述

运行一下打印他的类型看看,可以看到是scrapy.http.response.html.HtmlResponse类型

scrapy crawl example # example是你的爬虫名字,也就是类里面的name属性

在这里插入图片描述
如果不想看到那么多烦人的日志信息就在settings.py中加上日志等级

LOG_LEVEL = 'WARNING'

在这里插入图片描述

重新运行看看效果,世界安静
在这里插入图片描述

既然知道是什么类型那就给他指定类型就行了

from scrapy.http.response import Response

def parse(self, response: Response, **kwargs):

.出来了,舒服了
在这里插入图片描述

修改模板并指定使用

终于可以看到有了正常的代码提示了,但是总不能每次都这样写吧,查看genspider命令,发现-t参数可以使用自定义模板
在这里插入图片描述

可以看到正常创建爬虫是使用basic这个模板
在这里插入图片描述

在你的解释器路径下找到该文件夹

\Python39\Lib\site-packages\scrapy\templates\spiders

可以在该路径下找到这个模板文件
在这里插入图片描述

如果是用pycharm还可以这样操作更快一点,而且直接定位到解释器位置以免你用的是虚拟环境路径不一样

导入scrapy包然后按住键盘的ctrl键然后用鼠标左键点一下就可以跳过去他的源代码
在这里插入图片描述

点击后跳转到__init__.py,其实跳哪个不重要,只要属于scrapy这个包就好了
在这里插入图片描述

然后就可以找到模板文件了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这样就可以看见他的内容了,也可以右键打开他的文件夹
在这里插入图片描述

我选择复制一份出来(你也可以在上面直接改那就不用使用genspider -t指定模板了)
mytemplate.tmpl 你想叫什么名字都可以

import scrapy
from scrapy.http.response import Response


class $classname(scrapy.Spider):
    name = "$name"
    allowed_domains = ["$domain"]
    start_urls = ["$url"]

    def parse(self, response: Response, **kwargs):
        pass

然后就可以使用自定义的模板创建爬虫

# scrapy genspider -t 模板名称 爬虫名称 域名
 scrapy genspider -t mytemplate test test.com

可以看见新建的爬虫没有一点问题,舒服的代码提示
在这里插入图片描述

注意模板名称必须写对,不然就会报错
在这里插入图片描述

如果你忘了你的模板名称可以安装提示查看

scrapy genspider --list

在这里插入图片描述

运行scrapy

前面提到的启动scrapy需要在终端使用以下命令

scrapy crawl example # example是你的爬虫名字,也就是类里面的name属性

这么麻烦?我都用万能的pycharm了就没有简单的办法让我运行和断点调试吗?
我就能不能用右键运行或调试?万能的ctrl + shift + F10吗?
在这里插入图片描述
那肯定是可以的啊

在项目根目录也就scrapy.cfg同一层,settings.py的上一层创建main.py(你想叫啥都行)文件写入以下代码

main.py

from scrapy.cmdline import execute
import os
import sys

if __name__ == '__main__':
    sys.path.append(os.path.dirname(os.path.abspath(__file__)))
    execute(['scrapy', 'crawl', 'example'])  # 把最后的参数换成你自己的爬虫名字

在这里插入图片描述

直接运行该文件就可以运行scrapy
在这里插入图片描述

运行过一次后面就可以用CTRL + F5
在这里插入图片描述

也可以使用DEBUG调试,可以看到已经停在断点处了
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/813881.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

11、springboot项目启动时对容器中的bean进行延迟初始化

springboot项目启动时对容器中的bean进行延迟初始化 预初始化: Spring Boot在启动应用时,会启动Spring容器,当启动Spring容器时,Spring会自动初始化容器中所有的singleton Bean——这是默认行为 预初始化的好处: 1、项…

Qt 4. 发布exe

把ex2.exe放在H盘Ex2文件夹下,执行 H:\Ex2>windeployqt ex2.exe H:\Ex2>windeployqt ex2.exe H:\Ex2\ex2.exe 64 bit, release executable Adding Qt5Svg for qsvgicon.dll Skipping plugin qtvirtualkeyboardplugin.dll due to disabled dependencies (Qt5…

C++多线程的简单使用

一.引言 在C学习中,我们在初步学习的过程中写的程序都只可以在本地并且只可以被本主机访问。在此,我们会想要让别人也体验一下我们邪恶的程序的话,我们该怎么办呢? 首先我们介绍的时多线程编程,就相当于我们的登录qq&…

flask数据库操作

本文将详细介绍在Flask Web应用中如何设计数据库模型,并使用Flask-SQLAlchemy等扩展进行数据库操作的最佳实践。内容涵盖数据模型设计,ORM使用,关系映射,查询方法,事务处理等方面。通过本文,您可以掌握Flask数据库应用的基本知识。 Flask作为一个流行的Python Web框架,提供了高…

强化学习(PPO,DQN,A3C)

目录 1.强化学习和深度学习的区别 2. 强化学习思路 3.baseline 4.PPO 4.1on-policy和off-policy简单理解 4.2actotcritic 5.DQN(回归问题) 4.1公式 4.2Q表 参考文献 1.强化学习和深度学习的区别 强化学习和深度学习的区别:在深度学习中&a…

【*1900 图论+枚举思想】CF1328 E

Problem - E - Codeforces 题意&#xff1a; 思路&#xff1a; 注意到题目的性质&#xff1a;满足条件的路径个数是极少的&#xff0c;因为每个点离路径的距离<1 先考虑一条链&#xff0c;那么直接就选最深那个点作为端点即可 为什么&#xff0c;因为我们需要遍历所有点…

助你丝滑过度到 Vue3 其组合式API的应用 ②⑦

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; VUE3~TS &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f449;…

C++成神之路 | 第一课【步入C++的世界】

目录 一、认识C++ 1.1、关于 C++ 1.2、C++的前世今生 1.2.1、C+

【Tomcat---1】IDEA控制台tomcat日志输出乱码解决

一、修改IDEA的文件编码配置为UTF-8 二、修改IDEA的vmoptions文件&#xff0c;添加-Dfile.encodingUTF-8 到Tomcat目录/conf文件夹修改logging.properties 重启idea即可。采用统一的编码

ansible的脚本——playbook剧本

目录 一、playbook的组成 二、 playbook安装httpd服务 1.编写playbook剧本 2.运行playbook 三、定义、引用变量 四、 指定远程主机sudo切换用户 五、when条件判断 六、迭代 七、Templates 模块 1.先准备一个以 .j2 为后缀的 template 模板文件&#xff0c;设置引用的变…

微信小程序生成带参数的二维码base64转png显示

getQRCode() {var that this;wx.request({url: http://localhost:8080/getQRCode?ID 13,header: {content-type: application/json},method: POST,responseType: arraybuffer,//将原本按文本解析修改为arraybuffersuccess(res) {that.setData({getQRCode: wx.arrayBufferToB…

Java集合篇

前言&#xff1a;笔者参考了JavaGuide、三分恶等博主的八股文&#xff0c;结合Chat老师和自己的理解&#xff0c;整理了一篇关于Java集合的八股文。希望对各位读者有所帮助~~ 引言 常见集合有哪些&#xff1f; Java集合相关类和接口都在java.util包中&#xff0c;按照其存储…

JVM基础篇-虚拟机栈

JVM基础篇-虚拟机栈 定义 Java Virtual Machine Stacks &#xff08;Java 虚拟机栈&#xff09; 每个线程运行时所需要的内存&#xff0c;称为虚拟机栈每个栈由多个栈帧&#xff08;Frame&#xff09;组成&#xff0c;对应着每次方法调用时所占用的内存每个线程只能有一个活动…

Spring的创建及使用

文章目录 什么是SpringSpring项目的创建存储Bean对象读取Bean对象getBean()方法 更简单的读取和存储对象的方式路径配置使用类注解存储Bean对象关于五大类注解使用方法注解Bean存储对象Bean重命名 Bean对象的读取 使用Resource注入对象Resource VS Autowired同一类型多个bean对…

QT服务器练习

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//给服务器指针实例化空间server new QTcpServer(this); }Widget::~Widget() {delete ui; }//启动服务器按钮对…

第1篇:了解Matter物模型翻译器

第1篇&#xff1a;了解Matter物模型翻译器 1. Matter物模型简介2. 物模型翻译成编程语言3. 思考题 1. Matter物模型简介 Matter物模型的介绍可以参考: Matter Core Specification的第7章 Matter物模型直观展示&#xff0c;可以看下图1-1&#xff0c; Matter Dimmable Light的…

【Linux】7、D-Bus 消息总线系统

文章目录 d-bus 官网 d-bus详解 D-Bus 是一种消息总线系统&#xff0c;是应用程序相互通信的一种简单方法。除了进程间通信之外&#xff0c;D-Bus 还有助于协调进程生命周期; 它使得编写“单实例”应用程序或守护进程以及在需要应用程序和守护进程的服务时按需启动它们变得简…

【学习笔记】关于RAW图片的概念学习

这里是尼德兰的喵芯片设计相关文章&#xff0c;欢迎您的访问&#xff01; 如果文章对您有所帮助&#xff0c;期待您的点赞收藏&#xff01; 让我们一起为成为芯片前端全栈工程师而努力&#xff01; 前言 能为我介绍一下raw图片吗&#xff1f; 当谈论"Raw图片"时&am…

c++ ,vs2019, cpp20规范之 forward_list 源码分析

通过阅读源码可知&#xff0c;该单向链表不像list双向链表那样有专门的前导节点。即list._Mypair._Myval2._head._next才指向第一个有效数据节点。而 forward_list ._Mypair._Myval2._head 已经指向了有效数据节点。原因就在于复杂巧妙的类型转换。如下图的构造函数里&#xff…