千家信息网

python爬虫案例代码分析

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,今天小编给大家分享一下python爬虫案例代码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来
千家信息网最后更新 2026年11月04日python爬虫案例代码分析

今天小编给大家分享一下python爬虫案例代码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

  • 爬取对象:当当网 http://book.dangdang.com/

  • 要求:获取三级类目的名称,并得到详情页书名和图片url

第一步 页面分析

  • 需求:大分类 二级分类 三级分类 图书的名字和图片的src

  • 大分类

    • 1 在大分类中有一个span标签,但是源码中没有

    • 2 有的大分类在dt标签下面还有一个a标签 /dt//text().extract()
      获取dt标签下的全部文本

    • 整个大分类都在 div con flq_body 它下面的 div/dl/dt

  • 二级分类

    • div level one --> dl class="inner_dl" dt/text()

    • 注意:1 有的大分类在dt标签下面还有一个a标签 /dt//text().extract()

  • 三级分类

    • dl class="inner_dl" --> dd/a/text()

    • 注意:图片的src images/model/guan/url_none.png 这个时候还是要看下源码

    • data-original="http://img3m0.ddimg.cn/95/11/27854240-1_b_14.jpg"

第二步 实现步骤

  • 1 创建scrapy项目(爬虫)

  • 2 分析页面并实现逻辑

  • 3 改写程序(scrapy_redis)

  • 思路:先实现普通的scrapy爬虫,然后在改写成scrapy_redis

(一)准备程序

  • 在terminal终端输入

    scrapy startproject book# 爬虫程序名最好不要和爬虫程序重名scrapy genspider dangdang dangdang.com


  • 创建start.py文件,放在与scrapy.cfg同层目录下

    # 要运行整个程序的话,只需要运行这个文件from scrapy import cmdline# cmdline.execute('scrapy crawl db'.split())cmdline.execute(['scrapy','crawl','dangdang'])


  • 确保redis服务器开启,且可以连接

  • 并输入lpush dangdang:start_urls url

(二)setting.py文件

  • 固定格式

SPIDER_MODULES = ['book.spiders']NEWSPIDER_MODULE = 'book.spiders'# 去重过滤DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"# scheduler队里SCHEDULER = "scrapy_redis.scheduler.Scheduler"# 数据持久化SCHEDULER_PERSIST = TrueROBOTSTXT_OBEY = FalseDEFAULT_REQUEST_HEADERS = {  'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36',  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',  'Accept-Language': 'en',}# 开启管道ITEM_PIPELINES = {    # 'book.pipelines.BookPipeline': 300,    'scrapy_redis.pipelines.RedisPipeline': 400,}

(三)dangdang.py文件

import scrapyfrom copy import deepcopyfrom scrapy_redis.spiders import RedisSpider # 第一步,添加模块class DangdangSpider(RedisSpider): # 第二步 修改继承的父类    name = 'dangdang'    allowed_domains = ['dangdang.com']    # start_urls = ['http://book.dangdang.com/']     #第三步,把start_urls 改写成 reids_key='爬虫文件名字'    redis_key = 'dangdang'    def parse(self, response):        div_list = response.xpath('//div[@class="con flq_body"]/div')        for div in div_list:            item = {}            # 获取大分类            item['b_cate'] = div.xpath('./dl/dt//text()').extract()            item['b_cate'] = [i.strip() for i in item['b_cate'] if len(i.strip())>0]            dl_list = div.xpath('.//dl[@class="inner_dl"]')            for dl in dl_list:                # 获取中分类                item['m_cate'] = dl.xpath('./dt//text()').extract()                item['m_cate'] = [i.strip() for i in item['m_cate'] if len(i.strip()) > 0]                # 获取小分类                a_list = dl.xpath('./dd/a')                for a in a_list:                    item['s_cate'] = a.xpath('./text()').extract_first()                    item['s_href'] = a.xpath('./@href').extract_first()                    if item['s_href'] is not None:                        yield scrapy.Request(                            url=item['s_href'],                            callback=self.parse_book_list,                            meta={'item':deepcopy(item)}                        )                    print(item)    def parse_book_list(self,response):        item = response.meta.get('item')        li_list = response.xpath('//ul[@class="list_aa "]/li')        for li in li_list:            # 图片的url images/model/guan/url_none.png            item['book_img'] = li.xpath('./a[@class="img"]/img/@src').extract_first()            if  item['book_img'] == 'images/model/guan/url_none.png':                item['book_img'] = li.xpath('./a[@class="img"]/img/@data-original').extract_first()            # 数据的名字            item['book_name'] = li.xpath('./a[@class="name"]/a/@title').extract_first()            # print(item)            yield item

(四)item.py文件

import scrapyclass BookItem(scrapy.Item):    # define the fields for your item here like:    name = scrapy.Field()    pass


以上就是"python爬虫案例代码分析"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

分类 爬虫 文件 标签 程序 分析 图片 知识 篇文章 名字 代码 案例 内容 数据 源码 逻辑 面的 页面 输入 运行 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 礼当家互联网科技 互联网与新科技 火传媒上海互联网科技 互联网科技素材视频竖屏 上海电发互联网科技有限公司 现代科技和互联网有关系吗 福州新华互联网科技学校 知乎 南山科技园互联网公司有哪些 中国科技创新与世界互联网大会 深圳艾果互联网通讯科技 恒生互联网科技业指数调整周期 互联网第三次科技革命特征 半导体是互联网高科技吗 互联网科技手抄报图片 互联网科技收购价值 亚光科技低轨卫星互联网 互联网科技大佬云集 互联网科技企业文化 广州全民伙伴互联网科技有限公司 颐高云石互联网科技 百单网互联网科技有限公司怎么样 互联网科技保险 盈实互联网科技 互联网科技logo 博兴的互联网电子科技公司 北京大学互联网科技怎么样 广州千川互联网科技有限公司 21世纪互联网科技成就 互联网科技新闻 山东亿川互联网科技有限责任公司
0