鱼C论坛

 找回密码
 立即注册
查看: 2545|回复: 8

[已解决]【scrapy爬虫】二层Request爬虫抓取豆瓣影讯明细失败

[复制链接]
发表于 2017-7-25 10:03:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 flyblood 于 2017-7-25 14:12 编辑

昨天学习了小甲鱼的爬虫,自己又模仿网上写了个爬虫抓取豆瓣的影讯,可什么都没抓取出来。。。加了打印,发现抓取详情的函数没有进去运行。查了网上的资料都搞不明白。只有来求助小甲鱼了
sprider的代码如下:
  1. # -*- coding: utf-8 -*-

  2. import scrapy
  3. import os,os.path
  4. from tutorial.items import DoubanItem

  5. class Douban_spider(scrapy.Spider):
  6.     name = 'douban'
  7.     allowed_domains = ['movie.douban.com/chart']
  8.     start_urls=[]

  9.     def start_requests(self):
  10.         os.chdir('D:\\AApythonAA\\tutorial\\')
  11.         if os.path.getsize ('movie_name.txt') :
  12.             
  13.             print(os.path.getsize ('movie_name.txt'),'跑到这里了哦~~~~~~~~~~~~~')
  14.             pass
  15.         else:
  16.             print('从这里开始啦~~')
  17.             yield self.make_requests_from_url('https://movie.douban.com/chart')
  18.         
  19.     def parse(self,response):
  20.         sel = scrapy.selector.Selector(response)
  21.         sites = sel.xpath('//div[@class="pl2"]/a/@href').extract()
  22.         for each_site in sites:
  23.             print('网址在这里:',each_site)
  24.             yield scrapy.Request(each_site,self.parse_detail)
  25.         
  26.     def parse_detail(self,response):
  27.         print('进入detail里面了~~~~')
  28.         sel2=scrapy.selector.Selector(response)
  29.         item = DoubanItem()
  30.         item['movie_name']=sel2.xpath('//span [@property="v:itemreviewed"]/text()').extract()                                     #取电影名
  31.         item['movie_direct']=sel2.xpath('//div [@id="info"]/span/span [@class="attrs"]/a [@rel="v:directedBy"]/text()').extract()   #导演
  32.         item['movie_roles']=sel2.xpath('//div [@id="info"]/span/span [@class="attrs"]/a [@rel="v:starring"]/text()').extract()     #主演
  33.         item['movie_type']=sel2.xpath('//div [@id="info"]/span [@property="v:genre"]/text()').extract()                           #类型
  34.         item['movie_date']=sel2.xpath('//div [@id="info"]/span [@property="v:initialReleaseDate"]/text()').extract()              #上映时间
  35.         item['movie_long']=sel2.xpath('//div [@id="info"]/span [@property="v:runtime"]/text()').extract()                         #电影片长
  36.         item['movie_description']=sel2.xpath('//div [@id="link-report"]/span [@property="v:summary"]/text()').extract()                  #简介
  37.         item['movie_rate']=sel2.xpath('//div [@class="rating_self clearfix"]/strong/text()').extract()                            #豆瓣评分   
  38.         print('我在这里啊~~~~~~~~~~~~~~~~~')
  39.         return item
复制代码

======================================================================================
print('网址在这里:',each_site)已经打印出了要继续抓取的网址,可是parse_detail中的print('进入detail里面了~~~~')就没有打印出来,sprider就close了。好奇怪啊
最佳答案
2017-7-27 15:35:26
本帖最后由 小锟 于 2017-7-27 15:50 编辑
flyblood 发表于 2017-7-27 13:48
我找到原因了。。。。不是request的问题

allowed_domains = ['movie.douban.com/chart']


在编码的时候用json的dumps方法,他有个ensure_ascii参数设置成False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-7-25 10:05:24 | 显示全部楼层
本帖最后由 flyblood 于 2017-7-25 14:11 编辑

cmd的部分log:
  1. 2017-07-25 09:40:55 [scrapy.core.engine] INFO: Spider opened
  2. 2017-07-25 09:40:55 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
  3. 2017-07-25 09:40:55 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
  4. 从这里开始啦~~
  5. 2017-07-25 09:40:55 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://movie.douban.com/chart> (referer: None)
  6. 网址在这里: https://movie.douban.com/subject/26266085/
  7. 2017-07-25 09:40:55 [scrapy.spidermiddlewares.offsite] DEBUG: Filtered offsite request to 'movie.douban.com': <GET https://movie.douban.com/subject/26266085/>
  8. 网址在这里: https://movie.douban.com/subject/26387939/
  9. 网址在这里: https://movie.douban.com/subject/26362764/
  10. 网址在这里: https://movie.douban.com/subject/26279202/
  11. 网址在这里: https://movie.douban.com/subject/20451290/
  12. 网址在这里: https://movie.douban.com/subject/25818101/
  13. 网址在这里: https://movie.douban.com/subject/26877237/
  14. 网址在这里: https://movie.douban.com/subject/26593587/
  15. 网址在这里: https://movie.douban.com/subject/26382962/
  16. 网址在这里: https://movie.douban.com/subject/26365236/
  17. 2017-07-25 09:40:55 [scrapy.core.engine] INFO: Closing spider (finished)
  18. 2017-07-25 09:40:55 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
  19. {'downloader/request_bytes': 294,
  20. 'downloader/request_count': 1,
  21. 'downloader/request_method_count/GET': 1,
  22. 'downloader/response_bytes': 11804,
  23. 'downloader/response_count': 1,
  24. 'downloader/response_status_count/200': 1,
  25. 'finish_reason': 'finished',
  26. 'finish_time': datetime.datetime(2017, 7, 25, 1, 40, 55, 892075),
  27. 'log_count/DEBUG': 3,
  28. 'log_count/INFO': 7,
  29. 'offsite/domains': 1,
  30. 'offsite/filtered': 10,
  31. 'request_depth_max': 1,
  32. 'response_received_count': 1,
  33. 'scheduler/dequeued': 1,
  34. 'scheduler/dequeued/memory': 1,
  35. 'scheduler/enqueued': 1,
  36. 'scheduler/enqueued/memory': 1,
  37. 'start_time': datetime.datetime(2017, 7, 25, 1, 40, 55, 485052)}
  38. 2017-07-25 09:40:55 [scrapy.core.engine] INFO: Spider closed (finished)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-26 14:13:35 | 显示全部楼层
第二天了,没有人能够回答我吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-27 10:15:30 | 显示全部楼层
第三天,再顶顶,各位大神来看看啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-27 10:59:41 | 显示全部楼层
    def parse(self,response):

            yield scrapy.Request(each_site,self.parse_detail)

是不是self.parse_detail没有传参数response进去啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-27 11:07:09 | 显示全部楼层
小锟 发表于 2017-7-27 10:59
def parse(self,response):

            yield scrapy.Request(each_site,self.parse_detail)

应该不是吧,scrapy.Request里面写的
callback (callable) – the function that will be called with the response of this request (once its downloaded) as its first parameter.
self.prase_detail就是回调函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-27 12:21:25 | 显示全部楼层
本帖最后由 小锟 于 2017-7-27 12:28 编辑

看看这个吧,也许有点帮助http://doc.okbase.net/lpe234/archive/111679.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-27 13:48:22 | 显示全部楼层
我找到原因了。。。。不是request的问题

allowed_domains = ['movie.douban.com/chart']
这个问题。。。灵感一来,把这句注释掉了,json就有了。不过是unicode的。。还要转换中文,不知道怎么弄了。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-27 15:35:26 | 显示全部楼层    本楼为最佳答案   
本帖最后由 小锟 于 2017-7-27 15:50 编辑
flyblood 发表于 2017-7-27 13:48
我找到原因了。。。。不是request的问题

allowed_domains = ['movie.douban.com/chart']


在编码的时候用json的dumps方法,他有个ensure_ascii参数设置成False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-30 12:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表