pycharm写scrapy遇到的问题

目录

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

背景

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

创建scrapy

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

安装scrapy

pip install scrapy

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

scrapy version

在这里插入图片描述

创建一个scrapy项目

scrapy startproject yourprojectname

pycharm写scrapy遇到的问题_第1张图片

根据提示创建爬虫

cd asd
scrapy genspider example example.com

这样就创建成功了
pycharm写scrapy遇到的问题_第2张图片

难受的开始

使用PyCharm打开这个项目,却发现爬虫中的parse函数是灰色的框
pycharm写scrapy遇到的问题_第3张图片

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

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

进到父类可以看到有一个**kwargs参数
pycharm写scrapy遇到的问题_第4张图片

**kwargs参数加入到自己的爬虫的parse上面去,灰框就不见了,总算看着不难受了
pycharm写scrapy遇到的问题_第5张图片

指定类型

但是还有一个问题,灰框只是看着难受,没有代码提示才是真的难受,.不出来谁懂啊
pycharm写scrapy遇到的问题_第6张图片

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

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

pycharm写scrapy遇到的问题_第7张图片
如果不想看到那么多烦人的日志信息就在settings.py中加上日志等级

LOG_LEVEL = 'WARNING'

pycharm写scrapy遇到的问题_第8张图片

重新运行看看效果,世界安静
pycharm写scrapy遇到的问题_第9张图片

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

from scrapy.http.response import Response

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

.出来了,舒服了
pycharm写scrapy遇到的问题_第10张图片

修改模板并指定使用

终于可以看到有了正常的代码提示了,但是总不能每次都这样写吧,查看genspider命令,发现-t参数可以使用自定义模板
pycharm写scrapy遇到的问题_第11张图片

可以看到正常创建爬虫是使用basic这个模板
pycharm写scrapy遇到的问题_第12张图片

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

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

可以在该路径下找到这个模板文件
pycharm写scrapy遇到的问题_第13张图片

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

导入scrapy包然后按住键盘的ctrl键然后用鼠标左键点一下就可以跳过去他的源代码
pycharm写scrapy遇到的问题_第14张图片

点击后跳转到__init__.py,其实跳哪个不重要,只要属于scrapy这个包就好了
pycharm写scrapy遇到的问题_第15张图片

然后就可以找到模板文件了
pycharm写scrapy遇到的问题_第16张图片
pycharm写scrapy遇到的问题_第17张图片
pycharm写scrapy遇到的问题_第18张图片

这样就可以看见他的内容了,也可以右键打开他的文件夹
pycharm写scrapy遇到的问题_第19张图片

我选择复制一份出来(你也可以在上面直接改那就不用使用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

可以看见新建的爬虫没有一点问题,舒服的代码提示
pycharm写scrapy遇到的问题_第20张图片

注意模板名称必须写对,不然就会报错
pycharm写scrapy遇到的问题_第21张图片

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

scrapy genspider --list

pycharm写scrapy遇到的问题_第22张图片

运行scrapy

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

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

这么麻烦?我都用万能的pycharm了就没有简单的办法让我运行和断点调试吗?
我就能不能用右键运行或调试?万能的ctrl + shift + F10吗?
pycharm写scrapy遇到的问题_第23张图片
那肯定是可以的啊

在项目根目录也就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'])  # 把最后的参数换成你自己的爬虫名字

pycharm写scrapy遇到的问题_第24张图片

直接运行该文件就可以运行scrapy
pycharm写scrapy遇到的问题_第25张图片

运行过一次后面就可以用CTRL + F5
pycharm写scrapy遇到的问题_第26张图片

也可以使用DEBUG调试,可以看到已经停在断点处了
pycharm写scrapy遇到的问题_第27张图片

你可能感兴趣的:(爬虫,bug,pycharm,scrapy,ide)