鱼C论坛

 找回密码
 立即注册
查看: 3438|回复: 6

[已解决]用scrapy抓取天猫商品名称及二级页面的店铺名称问题

[复制链接]
发表于 2017-3-20 12:02:34 | 显示全部楼层 |阅读模式

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

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

x
目的:想把天猫女装页面的商品名称和价格抓取出来 ,还有对应的店铺名称(这个想要通过商品链接进去详细页面之后抓取)

这个是不是属于多级页面的抓取...但是结果显示我并没有抓取到信息     不知道问题出在哪里 求高手指点

代码如下:
  1. # -*- coding: utf-8 -*-
  2. import scrapy
  3. from topgoods.items import TopgoodsItem

  4. class TmGoodsSpider(scrapy.Spider):
  5.     name = "tm_goods"
  6.     allowed_domains = ["http://www.tmall.com"]
  7.     start_urls = ['https://list.tmall.com/search_product.htm?spm=a220m.1000858.1000724.4.lBvqIw&q=%C5%AE%D7%B0&sort=d&style=g&from=mallfp..pc_1_searchbutton#J_Filter/']

  8.     count = 0


  9.     def parse(self, response):
  10.         TmGoodsSpider.count += 1     #记录爬取的页面

  11.         sites = response.xpath('//div[@id="J_ItemList"]/div[@class="product"]/div')
  12.         
  13.         if not sites:
  14.             self.log("List Page error--%s" % response.url)          #判断位置是否存在

  15.         for site in sites:
  16.             item = TopgoodsItem()
  17.             item['GOODS_NAME'] = site.xpath('p/a/text()')[0].extract()      #商品名称
  18.             pre_goods_url = site.xpath('p/a/@href')[0].extract()
  19.             item['GOODS_URL'] = pre_goods_url if "http:" in pre_goods_url else ("http:" + pre_goods_url)   #商品链接

  20.             yield scrapy.Request(url=item["GOODS_URL"], meta={'item':item}, callbacak=self.parse_detail, dont_filter=True)   #这个是将链接作为response传到下面这个函数?

  21.     def parse_detail(self, response):

  22.         sites = response.xpath('//*[@id="side-shop-info"]/div[1]/h3/div')   #这是详细信息页面的 xpath
  23.         if not sites:
  24.             self.log("Detail Page error--%s" % response.url)        #同上,判断位置是否存在

  25.         item = response.meta['item']        #这个是将之前的商品名称和链接传入 继续保存
  26.         for site in sites:
  27.         
  28.             item['SHOP_NAME'] = site.xpath('a/text()').extract()   

  29.         yield item
  30.             
复制代码


最后把文件存为csv格式 ,还有命令行显示的信息存为日志  ,不知道哪里出了问题

items 代码如下:

  1. import scrapy


  2. class TopgoodsItem(scrapy.Item):
  3.     # define the fields for your item here like:
  4.     # name = scrapy.Field()
  5.     GOODS_NAME = scrapy.Field()
  6.     GOODS_URL = scrapy.Field()
  7.     SHOP_NAME = scrapy.Field()
复制代码


settings中更改了的代码如下:

  1. DOWNLOADER_MIDDLEWARES = {
  2.     #'topgoods.middlewares.MyCustomDownloaderMiddleware': 543,
  3.     'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 750,
  4. }

  5. LOG_FILE = "scrapy.log"    #命令行存为scrapy.log
复制代码


其他的文件都没有改过....然后我用的是python 3.6   window7操作系统 。

下面是我输入 scrapy crawl tm_goods -o data.csv   之后命令行的信息:

  1. 2017-03-20 11:39:12 [scrapy.utils.log] INFO: Scrapy 1.3.2 started (bot: topgoods)
  2. 2017-03-20 11:39:12 [scrapy.utils.log] INFO: Overridden settings: {'BOT_NAME': 'topgoods', 'LOG_ENABLED': False, 'LOG_FILE': 'scrapy.log', 'NEWSPIDER_MODULE': 'topgoods.spiders', 'ROBOTSTXT_OBEY': True, 'SPIDER_MODULES': ['topgoods.spiders']}
  3. 2017-03-20 11:39:26 [scrapy.utils.log] INFO: Scrapy 1.3.2 started (bot: topgoods)
  4. 2017-03-20 11:39:26 [scrapy.utils.log] INFO: Overridden settings: {'BOT_NAME': 'topgoods', 'FEED_FORMAT': 'csv', 'FEED_URI': 'data.csv', 'LOG_FILE': 'scrapy.log', 'NEWSPIDER_MODULE': 'topgoods.spiders', 'ROBOTSTXT_OBEY': True, 'SPIDER_MODULES': ['topgoods.spiders']}
  5. 2017-03-20 11:39:26 [scrapy.middleware] INFO: Enabled extensions:
  6. ['scrapy.extensions.corestats.CoreStats',
  7. 'scrapy.extensions.telnet.TelnetConsole',
  8. 'scrapy.extensions.feedexport.FeedExporter',
  9. 'scrapy.extensions.logstats.LogStats']
  10. 2017-03-20 11:39:26 [py.warnings] WARNING: c:\users\administrator\appdata\local\programs\python\python36\lib\site-packages\scrapy\utils\deprecate.py:156: ScrapyDeprecationWarning: `scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware` class is deprecated, use `scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware` instead
  11.   ScrapyDeprecationWarning)

  12. 2017-03-20 11:39:27 [scrapy.middleware] INFO: Enabled downloader middlewares:
  13. ['scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware',
  14. 'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
  15. 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
  16. 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
  17. 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
  18. 'scrapy.downloadermiddlewares.retry.RetryMiddleware',
  19. 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
  20. 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
  21. 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
  22. 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
  23. 'scrapy.downloadermiddlewares.stats.DownloaderStats']
  24. 2017-03-20 11:39:27 [scrapy.middleware] INFO: Enabled spider middlewares:
  25. ['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
  26. 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware',
  27. 'scrapy.spidermiddlewares.referer.RefererMiddleware',
  28. 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
  29. 'scrapy.spidermiddlewares.depth.DepthMiddleware']
  30. 2017-03-20 11:39:27 [scrapy.middleware] INFO: Enabled item pipelines:
  31. []
  32. 2017-03-20 11:39:27 [scrapy.core.engine] INFO: Spider opened
  33. 2017-03-20 11:39:27 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
  34. 2017-03-20 11:39:27 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
  35. 2017-03-20 11:39:27 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://list.tmall.com/robots.txt> (referer: None)
  36. 2017-03-20 11:39:27 [scrapy.downloadermiddlewares.robotstxt] DEBUG: Forbidden by robots.txt: <GET https://list.tmall.com/search_product.htm?spm=a220m.1000858.1000724.4.lBvqIw&q=%C5%AE%D7%B0&sort=d&style=g&from=mallfp..pc_1_searchbutton#J_Filter/>
  37. 2017-03-20 11:39:27 [scrapy.core.engine] INFO: Closing spider (finished)
  38. 2017-03-20 11:39:27 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
  39. {'downloader/exception_count': 1,
  40. 'downloader/exception_type_count/scrapy.exceptions.IgnoreRequest': 1,
  41. 'downloader/request_bytes': 222,
  42. 'downloader/request_count': 1,
  43. 'downloader/request_method_count/GET': 1,
  44. 'downloader/response_bytes': 291,
  45. 'downloader/response_count': 1,
  46. 'downloader/response_status_count/200': 1,
  47. 'finish_reason': 'finished',
  48. 'finish_time': datetime.datetime(2017, 3, 20, 3, 39, 27, 525192),
  49. 'log_count/DEBUG': 3,
  50. 'log_count/INFO': 7,
  51. 'log_count/WARNING': 1,
  52. 'response_received_count': 1,
  53. 'scheduler/dequeued': 1,
  54. 'scheduler/dequeued/memory': 1,
  55. 'scheduler/enqueued': 1,
  56. 'scheduler/enqueued/memory': 1,
  57. 'start_time': datetime.datetime(2017, 3, 20, 3, 39, 27, 71175)}
  58. 2017-03-20 11:39:27 [scrapy.core.engine] INFO: Spider closed (finished)
复制代码



这个样子是没有报错吧..看不懂...只看懂了爬取了0条信息  求解答

最佳答案
2017-3-26 02:05:22
你先好好看看网页的源代码中有没有你要提取的信息,先确定这个是不是JS加载的吧
我爬过天猫的信息,全部是都是JS文件加载的,原网页根本没有信息,有的还需要提供cookie
偷偷告诉你,去爬手机端的信息会简单很多,天猫的信息能看到的我都已经爬过了,都能爬取到
再不行,selenium也能搞定
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-3-20 12:19:19 | 显示全部楼层
中间有Forbidden by robots.txt,直接被天猫的robots给拒绝了

方法是:关闭scrapy自带的ROBOTSTXT_OBEY功能,在setting找到这个变量,设置为False即可解决。

你其他地方有没有问题我不知道,只是根据你提供的信息做的解答。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-20 22:54:20 | 显示全部楼层
本帖最后由 Shyanne 于 2017-3-20 22:56 编辑
ooxx7788 发表于 2017-3-20 12:19
中间有Forbidden by robots.txt,直接被天猫的robots给拒绝了

方法是:关闭scrapy自带的ROBOTSTXT_OBEY ...


你好 我把那个参数改为False了

之后发现天猫的网站好像要登陆账号才能查询商品信息 所以爬取的时候第一步就出现了bug
然后我换成了淘宝的网站 结果还是出现错误
  1. 2017-03-20 22:49:39 [scrapy.utils.log] INFO: Scrapy 1.3.2 started (bot: topgoods)
  2. 2017-03-20 22:49:39 [scrapy.utils.log] INFO: Overridden settings: {'BOT_NAME': 'topgoods', 'FEED_FORMAT': 'csv', 'FEED_URI': 'data.csv', 'LOG_FILE': 'scrapy.log', 'NEWSPIDER_MODULE': 'topgoods.spiders', 'SPIDER_MODULES': ['topgoods.spiders']}
  3. 2017-03-20 22:49:39 [scrapy.middleware] INFO: Enabled extensions:
  4. ['scrapy.extensions.corestats.CoreStats',
  5. 'scrapy.extensions.telnet.TelnetConsole',
  6. 'scrapy.extensions.feedexport.FeedExporter',
  7. 'scrapy.extensions.logstats.LogStats']
  8. 2017-03-20 22:49:39 [scrapy.middleware] INFO: Enabled downloader middlewares:
  9. ['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
  10. 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
  11. 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
  12. 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
  13. 'scrapy.downloadermiddlewares.retry.RetryMiddleware',
  14. 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
  15. 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
  16. 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
  17. 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
  18. 'scrapy.downloadermiddlewares.stats.DownloaderStats']
  19. 2017-03-20 22:49:39 [scrapy.middleware] INFO: Enabled spider middlewares:
  20. ['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
  21. 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware',
  22. 'scrapy.spidermiddlewares.referer.RefererMiddleware',
  23. 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
  24. 'scrapy.spidermiddlewares.depth.DepthMiddleware']
  25. 2017-03-20 22:49:39 [scrapy.middleware] INFO: Enabled item pipelines:
  26. []
  27. 2017-03-20 22:49:39 [scrapy.core.engine] INFO: Spider opened
  28. 2017-03-20 22:49:39 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
  29. 2017-03-20 22:49:39 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
  30. 2017-03-20 22:49:39 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://s.taobao.com/list?spm=a21bo.50862.201867-links-0.5.CwMa4H&q=%E8%A3%A4%E5%AD%90&cat=16&style=grid&seller_type=taobao&sort=sale-desc> (referer: None)
  31. 2017-03-20 22:49:39 [tm_goods] DEBUG: List Page error--https://s.taobao.com/list?spm=a21bo.50862.201867-links-0.5.CwMa4H&q=%E8%A3%A4%E5%AD%90&cat=16&style=grid&seller_type=taobao&sort=sale-desc
  32. 2017-03-20 22:49:39 [scrapy.core.engine] INFO: Closing spider (finished)
  33. 2017-03-20 22:49:39 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
  34. {'downloader/request_bytes': 327,
  35. 'downloader/request_count': 1,
  36. 'downloader/request_method_count/GET': 1,
  37. 'downloader/response_bytes': 43015,
  38. 'downloader/response_count': 1,
  39. 'downloader/response_status_count/200': 1,
  40. 'finish_reason': 'finished',
  41. 'finish_time': datetime.datetime(2017, 3, 20, 14, 49, 39, 881765),
  42. 'log_count/DEBUG': 3,
  43. 'log_count/INFO': 7,
  44. 'response_received_count': 1,
  45. 'scheduler/dequeued': 1,
  46. 'scheduler/dequeued/memory': 1,
  47. 'scheduler/enqueued': 1,
  48. 'scheduler/enqueued/memory': 1,
  49. 'start_time': datetime.datetime(2017, 3, 20, 14, 49, 39, 391764)}
  50. 2017-03-20 22:49:39 [scrapy.core.engine] INFO: Spider closed (finished)
复制代码


31行标注的是我在代码中写的
  1. if not sites:
  2.             self.log("List Page error--%s" % response.url)          #判断位置是否存在
复制代码


说明位置不存在吗。。。那个网站我能点进去 xpath也是复制过去的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-26 02:05:22 | 显示全部楼层    本楼为最佳答案   
你先好好看看网页的源代码中有没有你要提取的信息,先确定这个是不是JS加载的吧
我爬过天猫的信息,全部是都是JS文件加载的,原网页根本没有信息,有的还需要提供cookie
偷偷告诉你,去爬手机端的信息会简单很多,天猫的信息能看到的我都已经爬过了,都能爬取到
再不行,selenium也能搞定
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-26 08:36:58 | 显示全部楼层
gopythoner 发表于 2017-3-26 02:05
你先好好看看网页的源代码中有没有你要提取的信息,先确定这个是不是JS加载的吧
我爬过天猫的信息,全部是 ...

啊对 所以用访问天猫的时候一直跳转到登陆页面...对于小白真的是...我还是得再多学学 谢谢啦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-26 23:49:05 | 显示全部楼层
Shyanne 发表于 2017-3-26 08:36
啊对 所以用访问天猫的时候一直跳转到登陆页面...对于小白真的是...我还是得再多学学  谢谢啦

还有,天猫对访问速度有反扒机制的。Scrapy的速度太快了,IP分分钟就要被封掉的,需要设置一下访问频率,这个就要自己去试试了,封一次IP要等好几个小时才能继续访问
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-30 13:25:04 | 显示全部楼层
gopythoner 发表于 2017-3-26 23:49
还有,天猫对访问速度有反扒机制的。Scrapy的速度太快了,IP分分钟就要被封掉的,需要设置一下访问频率, ...

恩呢 我会注意的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-26 06:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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