居然还有万能的pycharm解决不了的python程序???
由于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
参数加入到自己的爬虫的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
参数可以使用自定义模板
在你的解释器路径下找到该文件夹
\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 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']) # 把最后的参数换成你自己的爬虫名字