在django框架中调用scrapy爬虫,并实现动态获取关键字进行爬虫。
1. 创建scrapy爬虫项目
安装scrapy
命令:pip install scrapy
创建scrapy项目
命令:scrapy startproject <自定义的项目名称>
scrapy startproject JDCrawler
创建爬虫
进入项目根目录下(参考scrapy.cfg的路径为 根目录\scrapy.cfg)
命令:scrapy genspider <自定义爬虫名称> <允许爬取的域名>
scrapy genspider jd_spider search.jd.com
实现爬虫
根据自己的任务编写爬虫代码。
2.发布scrapy项目到scrapyd
安装scrapyd,scrapyd-client。使用pip即可安装。
在terminal中输入scrapy即可启动(pycharm为例)。
在scrapy.cfg里修改以下内容
注意在此文件中不能出现中文,注释掉的中文也不允许。
[settings] default = JDCrawler.settings [deploy:crawler] url = http://localhost:6800/ project = JDCrawler
部署爬虫
进入项目目录
命令:scrapyd-deploy 项目名称 -p 爬虫名称
scrapyd-deploy crawler -p JDCrawler
部署成功出现:
此处注意到spiders:1,若spiders下面有爬虫,但终端返回显示spiders:0,此时有问题。注意spiders下面只能放spider程序,解决方案是删除其他非蜘蛛程序的代码文件。
3.djando调用scrapy
修改在spiders下的蜘蛛程序。
添加__init__()方法,此处动态传入keyWord。
class JdSpiderSpider(scrapy.Spider): name = 'jd_spider' allowed_domains = ['search.jd.com'] def __init__(self, keyWord=None, *args, **kwargs): super(JdSpiderSpider, self).__init__(*args, **kwargs) self.query = keyWord # 传入query def parse(self, response, **kwargs): pass
修改django的代码
import requests #获取前端传来的字段信息 keyWord = request.POST['keyWord'] url = 'http://localhost:6800/schedule.json' data = {'project': 'JDCrawler', 'spider': 'jd_spider', 'keyWord': keyWord} requests.post(url=url, data=data)
当在django中执行到requests请求,便可以实现异步爬虫。