首先我的项目结构是这样:
途中圈出来的是scrapy项目。外层的为django 项目。
settings.py
import os
import sys
sys.path.append(os.path.dirname(os.path.abspath('.')))
os.environ['DJANGO_SETTINGS_MODULE'] = 'biyeshiji.settings'
import django
django.setup()
ITEM_PIPELINES = {
'toutiao_spider.pipelines.ToutiaoSpiderPipeline': 1,
}
item.py
from scrapy_djangoitem import DjangoItem
from app.models import TouTiao
class ToutiaoSpiderItem(DjangoItem):
django_model = TouTiao
spider.py
# -*- coding: utf-8 -*-
# 头条爬虫
import scrapy,json
from scrapy.http import Request
from urllib import parse
from toutiao_spider.items import ToutiaoSpiderItem
class ToutiaoSpider(scrapy.Spider):
name = 'toutiao'
def start_requests(self):
query_string = {
"offset": "0",
"format": "json",
"keyword": "甘肃",
"autoload": "true",
"count": "20",
"cur_tab": "1",
"from": "search_tab",
"pd": "synthesis"
}
qs = parse.urlencode(query_string)
url = 'https://www.toutiao.com/search_content/?'+qs
url = "https://lf.snssdk.com/api/search/content/?"+qs
yield Request(url=url, callback=self.parse_init_data)
def parse_init_data(self, response):
res = json.loads(response.text)['data']
item = ToutiaoSpiderItem()
for i in res:
item['title'] = i['display']['lemmaTitle']
item['description'] = i['display']['picAbs']
yield item
安装scprayd,网址:https://github.com/scrapy/scrapyd
安装scrapyd-client,网址:https://github.com/scrapy/scrapyd-client
在命令框中输入scrapyd,输出如下说明安装成功
打开http://localhost:6800/ 可以看到
点击jobs可以查看爬虫运行情况。
接下来就是让人很头疼的scrapyd-deploy问题了,查看官方文档上说用
scrapyd-deploy -l
可以看到当前部署的爬虫项目,但是当我输入这段命令的时候显示这个命令不存在或者有错误、不合法之类的。
解决方案:
在你的python目录下的Scripts文件夹中,我的路径是“D:\program files\python2.7.0\Scripts”,增加一个scrapyd-deploy.bat文件。
内容为:
@echo off
"D:\program files\python2.7.0\python.exe" "D:\program files\python2.7.0\Scripts\scrapyd-deploy" %*
然后重新打开命令框,再运行scrapyd-deploy -l 就可以了。
这一步要进入scrapy项目,否则会出现
Error: no Scrapy project found in this location
scrapyd-deploy
target为你的服务器命令,project是你的工程名字。
首先对你要发布的爬虫工程的scrapy.cfg 文件进行修改,我这个文件的内容如下:
[deploy:scrapyd1]
url = http://localhost:6800/
project = baidu
因此我输入的命令是:
scrapyd-deploy scrapyd1 -p baidu
import requests
url = 'http://localhost:6800/schedule.json'
data = {'project':'baidu', 'spider':'toutiao'}
print(requests.post(url=url,data=data))
spider 是 爬虫的 name。
requrl = "http://localhost:6800/listjobs.json?project=baidu"
requests.get(requrl)