python爬虫中的scrapy爬取淘宝前60条商品的相关信息(对淘宝多级页面的爬取详细解读)

**

一,整体规划:

**
1,要爬取的网站是:https://list.tmall.com/search_product.htm?q=Ůװ

2,要爬取的信息是:商品名称,商品价格,商品链接,店铺名称,店铺信息
(good_name, good_price, good_url, shop_name, shop_url)

二,确定网站可以被访问,相关信息可以被提取

1,打开cmd窗口。输入
scrapy shell https://list.tmall.com/search_product.htm?q=Ůװ
回车
在这里插入图片描述
2,紧接着输入view(response)回车
它就会自动打开那个网站,并且下面返回True
会自动代开那个网站
3,看能否获得相关内容
输入response.xpath(’//[@id=“J_ItemList”]/div[1]/div/p[2]/a/text()’).extract()
注解:xpath(’//
[@id=“J_ItemList”]/div[1]/div/p[2]/a/text()’)是你要获取获取元素的xpath路径,你可以通过
**(打开网站——》按F12——》点击代码框左上角的箭号——》在网页中选择你要获取的元素——》这时代码框就会出现你选择元素的代码位置,选择它右击——》copy——》copy Xpath)**如果是想要提取内容的话,可以在后面加上 /text(),并调用提取函数extract()
在这里插入图片描述
在这里插入图片描述

三,编写scrapy

  1. 生成项目
    选择文件夹(你想要项目所处的文件夹),按住shift右击,选择——》在从此处打开powershell窗口。
    输入scrapy startproject tmgoods 回车(这时就建立好了一个项目)
    输入 cd tmgoods 回车(进入tmgoods这个文件夹)
    输入 scrapy genspider tmgood tmall.com(建立一个名叫tmgood的爬虫,
    并限定它爬取域为tmall.com
    在这里插入图片描述

  2. 使用pycharm打开文件
    file——》open——》tmgoods——》ok——》this window

  3. 编辑item文件

     import scrapy
    
     class TmgoodsItem(scrapy.Item):
     # define the fields for your item here like:
     # name = scrapy.Field()
     good_price = scrapy.Field()
     good_name = scrapy.Field()
     good_url = scrapy.Field()
     shop_name = scrapy.Field()
    
  4. 编辑spider文件

     #-*- coding: utf-8 -*-
     import scrapy
     from tmgoods.items import TmgoodsItem
     
     class TmgoodSpider(scrapy.Spider):
         name = 'tmgood'
         allowed_domains = ['tmall.com']
         start_urls = ['https://list.tmall.com/search_product.htm?q=%C5%AE%D7%B0']
         #标记访问的个数
         count = 0
    
     def parse(self, response):
    
     TmgoodSpider.count += 1
     #这里的xpath路径不是copy得来的,你需要观察,网页中的代码结构,自己编写
     #可以百度xpath选择器的用法
     divs = response.xpath('//div[@id="J_ItemList"]/div[@class="product  "]/div')
     if not divs:
         self.log("list page error--%s" % response.url)
     #log是一个日志属性,有标记功能,这里的作用是标记url错误的页面
     for div in divs:
         item = TmgoodsItem()
         #实例化一个TmgoodsItem()对象
         #商品价格
         item['good_price'] = div.xpath('p[@class="productPrice"]/em/@title')[0].extract()
         #商品名称
         item['good_name'] = div.xpath('p[@class="productTitle"]/a/@title')[0].extract()
         #商品url
         good_url = div.xpath('p[@class="productTitle"]/a/@href')[0].extract()
         #因为有的url路径前面没有“http:”,这样就保证了使用url路径都是有效的
         item['good_url'] = good_url if "http:" in good_url else ("http:"+good_url)
         #yield的作用于return相似,这里把二级页面的url,和这个页面保存的数据返回
         #给self.parse_detail函数,继续解析
         yield scrapy.Request(url=item['good_url'], meta={"item": item},        callback=self.parse_detail, dont_filter=True)
         
         #接收上个函数的返回值,进行解析
     def parse_detail(self, response):
    
     div = response.xpath('//div[@class="extend"]/ul')
     if not div:
         self.log('Detail page error--%s' % response.url)
     #继承上个函数的item,并获得它的全部数据,这里可以理解成赋值(属性和数据的赋值)
     item = response.meta['item']
     div = div[0]
     item['shop_name'] = div.xpath('li[1]/div/a/text()')[0].extract()
     item['shop_url'] = div.xpath('li[1]/div/a/@href')[0].extract()
     item['company_name'] = div.xpath('li[3]/div/text()')[0].extract()
     item['company_address'] = div.xpath('li[4]/div/text()')[0].extract()
     #最终返回item(这里有所有保存的item['']数据)
     yield item
    
  5. 编辑setting文件
    因为淘宝在robot协议中是规定,不予许被scrapy爬取的
    如果你想爬取的话需要在setting中找到 ROBOTSTXT_OBEY = True
    改为ROBOTSTXT_OBEY = False
    这样你就不遵循robot协议了

运行代码,并将结果保存为result.csvwen文件

找到爬虫项目文件——》shift+右击——》选择打开powershell窗口——》
输入scrapy list 回车(检验有没有错误)出现爬虫的名字
输入scrapy crawl tmgood -o result.csv(运行爬虫,并open一个result.csv文件,把爬取的数据存进去)
在这里插入图片描述
在这里插入图片描述
最后
在这里插入图片描述
在这里插入图片描述

出现错误别灰心,这是很正常的,不出现bug才不正常呢,程序员是在不断试错中成长的,加油!

  • 7
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值