怎么在Django中使用Scrapy爬取数据
怎么在Django中使用Scrapy爬取数据?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
在django项目根目录位置创建scrapy项目,django_12是django项目,ABCkg是scrapy爬虫项目,app1是django的子应用
2.在Scrapy的settings.py中加入以下代码
importos importsys sys.path.append(os.path.dirname(os.path.abspath('.'))) os.environ['DJANGO_SETTINGS_MODULE']='django_12.settings'#项目名.settings importdjango django.setup()
3.编写爬虫,下面代码以ABCkg为例,abckg.py
#-*-coding:utf-8-*- importscrapy fromABCkg.itemsimportAbckgItem classAbckgSpider(scrapy.Spider): name='abckg'#爬虫名称 allowed_domains=['www.abckg.com']#允许爬取的范围 start_urls=['http://www.abckg.com/']#第一次请求的地址 defparse(self,response): print('返回内容:{}'.format(response)) """ 解析函数 :paramresponse:响应内容 :return: """ listtile=response.xpath('//*[@id="container"]/div/div/h3/a/text()').extract() listurl=response.xpath('//*[@id="container"]/div/div/h3/a/@href').extract() forindexinrange(len(listtile)): item=AbckgItem() item['title']=listtile[index] item['url']=listurl[index] yieldscrapy.Request(url=listurl[index],callback=self.parse_content,method='GET',dont_filter=True,meta={'item':item}) #获取下一页 nextpage=response.xpath('//*[@id="container"]/div[1]/div[10]/a[last()]/@href').extract_first() print('即将请求:{}'.format(nextpage)) yieldscrapy.Request(url=nextpage,callback=self.parse,method='GET',dont_filter=True) #获取详情页 defparse_content(self,response): item=response.meta['item'] item['content']=response.xpath('//*[@id="post-1192"]/dd/p').extract() print('内容为:{}'.format(item)) yielditem
4.scrapy中item.py 中引入django模型类
pipinstallscrapy-djangoitem
fromapp1importmodels fromscrapy_djangoitemimportDjangoItem classAbckgItem(DjangoItem): #definethefieldsforyouritemherelike: #name=scrapy.Field()#普通scrapy爬虫写法 #title=scrapy.Field() #url=scrapy.Field() #content=scrapy.Field() django_model=models.ABCkg#注入django项目的固定写法,必须起名为django_model=django中models.ABCkg表
5.pipelines.py中调用save()
importjson frompymongoimportMongoClient #用于接收parse函数发过来的item classAbckgPipeline(object): #i=0 defopen_spider(self,spider): #print('打开文件') ifspider.name=='abckg': self.f=open('abckg.json',mode='w') defprocess_item(self,item,spider): ##print('ABC管道接收:{}'.format(item)) #ifspider.name=='abckg': #self.f.write(json.dumps(dict(item),ensure_ascii=False)) ##elifspider.name=='cctv': ##img=requests.get(item['img']) ##ifimg!='': ##withopen('图片\%d.png'%self.i,mode='wb')asf: ##f.write(img.content) ##self.i+=1 item.save() returnitem#将item传给下一个管道执行 defclose_spider(self,spider): #print('关闭文件') self.f.close()
6.在django中models.py中一个模型类,字段对应爬取到的数据,选择适当的类型与长度
classABCkg(models.Model): title=models.CharField(max_length=30,verbose_name='标题') url=models.CharField(max_length=100,verbose_name='网址') content=models.CharField(max_length=200,verbose_name='内容') classMeta: verbose_name_plural='爬虫ABCkg' def__str__(self): returnself.title
7.通过命令启动爬虫:scrapy crawl 爬虫名称
8.django进入admin后台即可看到爬取到的数据。
关于怎么在Django中使用Scrapy爬取数据问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注恰卡编程网行业资讯频道了解更多相关知识。
推荐阅读
-
浅析Django接口版本控制
-
Django+Celery实现定时任务的示例
-
Python(django中如何使用restful框架)
-
Django实现drf搜索过滤和排序过滤
-
Django中怎么将ValuesQuerySet转换成json
今天就跟大家聊聊有关Django中怎么将ValuesQuerySet转换成json,可能很多人都不太了解,为了让大家更加了解,小编...
-
Django分页器的使用方法
这篇文章主要介绍了Django分页器的使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面...
-
Python Django搭建文件下载服务器的实现shili
-
在Django中如何使用MQTT的方法
这篇文章主要介绍了在Django中如何使用MQTT的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有...
-
Django开发RESTful API怎么实现增删改查
-
Django如何显示可视化图表的实践