pycharm写scrapy遇到的问题

目录

背景

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

创建scrapy

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

安装scrapy

python 复制代码
pip install scrapy

查看版本

能看版本就是安装成功

python 复制代码
scrapy version

创建一个scrapy项目

python 复制代码
scrapy startproject yourprojectname

根据提示创建爬虫

python 复制代码
cd asd
scrapy genspider example example.com

这样就创建成功了

难受的开始

使用PyCharm 打开这个项目,却发现爬虫中的parse 函数是灰色的框

python 复制代码
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类型

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

如果不想看到那么多烦人的日志信息就在settings.py中加上日志等级

python 复制代码
LOG_LEVEL = 'WARNING'

重新运行看看效果,世界安静

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

python 复制代码
from scrapy.http.response import Response

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

.出来了,舒服了

修改模板并指定使用

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

可以看到正常创建爬虫是使用basic 这个模板

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

python 复制代码
\Python39\Lib\site-packages\scrapy\templates\spiders

可以在该路径下找到这个模板文件

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

导入scrapy 包然后按住键盘的ctrl 键然后用鼠标左键点一下就可以跳过去他的源代码

点击后跳转到__init__.py,其实跳哪个不重要,只要属于scrapy 这个包就好了

然后就可以找到模板文件了


这样就可以看见他的内容了,也可以右键打开他的文件夹

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

python 复制代码
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

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

python 复制代码
# scrapy genspider -t 模板名称 爬虫名称 域名
 scrapy genspider -t mytemplate test test.com

可以看见新建的爬虫没有一点问题,舒服的代码提示

注意模板名称必须写对,不然就会报错

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

python 复制代码
scrapy genspider --list

运行scrapy

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

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

这么麻烦?我都用万能的pycharm 了就没有简单的办法让我运行和断点调试吗?

我就能不能用右键运行或调试?万能的ctrl + shift + F10吗?

那肯定是可以的啊

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

main.py

python 复制代码
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 调试,可以看到已经停在断点处了

相关推荐
慧都小项4 天前
Python 跨文件重构怎么验证?PyCharm 用法查找、重构预览与测试流程
python·重构·pycharm·单元测试
Xiu Yan4 天前
Python 数据分析:Pandas DataFrame 零基础入门教程
python·jupyter·pycharm·numpy·pandas
2501_915909064 天前
移动端开发工具链怎么组合比较好,iOS、Android、跨端三套配置方案
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
ai大模型-探索者4 天前
Git在PyCharm中的使用完全指南
pycharm·gitee
2501_915918414 天前
iOS编程用什么软件好?主流工具Xcode、AppCode、CodeRunner与新兴快蝎对比
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
Xiu Yan5 天前
Python 数据分析:Pandas Series 零基础入门教程
python·jupyter·pycharm·numpy·pandas
滕州市燕猫虎计算机科技工作室个体工商户5 天前
IDEA:Command line is too long
java·ide·intellij-idea
troy1285 天前
Codex 安全盲区:代码漏洞生成实测
windows·python·ci/cd·pycharm·django·github·fastapi
ikun_文5 天前
Django开启跨域请求
python·pycharm·django
泡泡鱼(敲代码中)6 天前
Python 容器类型学习笔记:列表、元组、字典、集合
开发语言·笔记·python·pycharm