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"}

 

你可能感兴趣的:(爬虫)