Advertisement

scrapy 爬取京东商品列表

阅读量:
复制代码
 import scrapy

    
  
    
 class JdSpider(scrapy.Spider):
    
     #scrapy crawl name便是由这个name决定的
    
     name = 'jd'
    
  
    
     def start_requests(self):
    
     url = 'https://www.jd.com/'
    
  
    
     yield scrapy.Request(url=url,callback=self.parse)
    
  
    
     def parse(self,response):
    
     links = response.css('li.cate_menu_item a')
    
     for link in links:
    
         title = link.css('a::text').extract_first()
    
         href = link.css('a::attr("href")').extract_first()
    
         d = {
    
             'title':title,
    
             'href':href,
    
         }
    
         #哎,他大爷的,就因为一个缩进浪费了我半个小时。。。。
    
         yield d

然后jd.json文件中文为二进制编码,为了显示为中文,不用o输出而是采用管道形式,需作一下调整,:

1、修改settings.py文件,取消掉下列代码的注释

复制代码
 ITEM_PIPELINES = {

    
    'jdspider.pipelines.JdspiderPipeline': 300,
    
 }

2、修改pipelines.py文件

复制代码
 import json

    
  
    
 class JdspiderPipeline(object):
    
     def process_item(self, item, spider):
    
     with open('jd.json','a') as f:
    
         json.dump(dict(item),f,ensure_ascii=False)
    
         f.write('\n')
    
     return item

3、最后选择文件的显示为gbk模式,如下图所示结果:

复制代码
 {"title": "家用电器", "href": "//jiadian.jd.com"}

    
 {"title": "手机", "href": "//shouji.jd.com/"}
    
 {"title": "运营商", "href": "//wt.jd.com"}
    
 {"title": "数码", "href": "//shuma.jd.com/"}
    
 {"title": "电脑", "href": "//diannao.jd.com/"}
    
 {"title": "办公", "href": "//bg.jd.com"}

全部评论 (0)

还没有任何评论哟~