背景
居然還有萬能的pycharm解決不了的python程序???
創(chuàng)建scrapy
由于PyCharm中沒有直接創(chuàng)建Scrapy項(xiàng)目的選項(xiàng),所以使用命令行創(chuàng)建一個(gè)項(xiàng)目
安裝scrapy
pip install scrapy
查看版本
能看版本就是安裝成功
scrapy version
創(chuàng)建一個(gè)scrapy項(xiàng)目
scrapy startproject yourprojectname
根據(jù)提示創(chuàng)建爬蟲
cd asd
scrapy genspider example example.com
這樣就創(chuàng)建成功了
難受的開始
使用PyCharm打開這個(gè)項(xiàng)目,卻發(fā)現(xiàn)爬蟲中的parse函數(shù)是灰色的框
Signature of method 'ExampleSpider.parse()' does not match signature of the base method in class 'Spider'
看一下父類中的parse函數(shù)是如何定義的,因?yàn)槲覀兪侵貙懜割惖姆椒?,?strong>pycharm點(diǎn)這個(gè)就行了
進(jìn)到父類可以看到有一個(gè)**kwargs
參數(shù)
把**kwargs
參數(shù)加入到自己的爬蟲的parse上面去,灰框就不見了,總算看著不難受了
指定類型
但是還有一個(gè)問題,灰框只是看著難受,沒有代碼提示才是真的難受,.
不出來誰懂啊
運(yùn)行一下打印他的類型看看,可以看到是scrapy.http.response.html.HtmlResponse
類型
scrapy crawl example # example是你的爬蟲名字,也就是類里面的name屬性
如果不想看到那么多煩人的日志信息就在settings.py中加上日志等級
LOG_LEVEL = 'WARNING'
重新運(yùn)行看看效果,世界安靜
既然知道是什么類型那就給他指定類型就行了
from scrapy.http.response import Response
def parse(self, response: Response, **kwargs):
.
出來了,舒服了
修改模板并指定使用
終于可以看到有了正常的代碼提示了,但是總不能每次都這樣寫吧,查看genspider命令,發(fā)現(xiàn)-t
參數(shù)可以使用自定義模板
可以看到正常創(chuàng)建爬蟲是使用basic這個(gè)模板
在你的解釋器路徑下找到該文件夾
\Python39\Lib\site-packages\scrapy\templates\spiders
可以在該路徑下找到這個(gè)模板文件
如果是用pycharm還可以這樣操作更快一點(diǎn),而且直接定位到解釋器位置以免你用的是虛擬環(huán)境路徑不一樣
導(dǎo)入scrapy包然后按住鍵盤的ctrl鍵然后用鼠標(biāo)左鍵點(diǎn)一下就可以跳過去他的源代碼
點(diǎn)擊后跳轉(zhuǎn)到__init__.py
,其實(shí)跳哪個(gè)不重要,只要屬于scrapy這個(gè)包就好了
然后就可以找到模板文件了
這樣就可以看見他的內(nèi)容了,也可以右鍵打開他的文件夾
我選擇復(fù)制一份出來(你也可以在上面直接改那就不用使用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
然后就可以使用自定義的模板創(chuàng)建爬蟲
# scrapy genspider -t 模板名稱 爬蟲名稱 域名
scrapy genspider -t mytemplate test test.com
可以看見新建的爬蟲沒有一點(diǎn)問題,舒服的代碼提示
注意模板名稱必須寫對,不然就會報(bào)錯(cuò)
如果你忘了你的模板名稱可以安裝提示查看
scrapy genspider --list
運(yùn)行scrapy
前面提到的啟動(dòng)scrapy需要在終端使用以下命令
scrapy crawl example # example是你的爬蟲名字,也就是類里面的name屬性
這么麻煩?我都用萬能的pycharm了就沒有簡單的辦法讓我運(yùn)行和斷點(diǎn)調(diào)試嗎?
我就能不能用右鍵運(yùn)行或調(diào)試?萬能的ctrl + shift + F10
嗎?
那肯定是可以的啊
在項(xiàng)目根目錄也就scrapy.cfg同一層,settings.py的上一層創(chuàng)建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']) # 把最后的參數(shù)換成你自己的爬蟲名字
直接運(yùn)行該文件就可以運(yùn)行scrapy
運(yùn)行過一次后面就可以用CTRL + F5
了文章來源:http://www.zghlxwxcb.cn/news/detail-621959.html
也可以使用DEBUG調(diào)試,可以看到已經(jīng)停在斷點(diǎn)處了文章來源地址http://www.zghlxwxcb.cn/news/detail-621959.html
到了這里,關(guān)于pycharm寫scrapy遇到的問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!