用Scrapy抓取当当网站数据

news2024/10/6 14:46:45

setting.py实验目的及要求:

实验目的

     通过本实验了解Scrapy爬虫框架;熟练掌握Scrapy的基本使用方法和常用技巧。

实验要求

     使用Scrapy框架,抓取网站商品信息(京东、淘宝、当当等任选一个),并将结果保存成多种形式。(本文选择当当)

实验原理及内容:

实验原理】(列出相关知识点)

  1. Scrapy框架:
    • 理解Scrapy框架的基本原理和架构。
  2. HTTP请求和响应:
    • 理解HTTP请求和响应的基本概念。
    • 如何通过Scrapy发送HTTP请求和处理响应。
  3. Web页面结构:
    • 了解HTML和CSS的基础知识,理解Web页面的结构。
  4. CSS选择器和XPath:
    • 使用CSS选择器或XPath在网页中定位和提取信息。
  5. Scrapy Spider:
    • 创建Scrapy Spider,定义如何抓取和解析页面。
    • 如何通过Spider跟踪链接和处理分页。
  6. Scrapy Items:
    • 定义Scrapy Items,用于存储抓取的数据。
  7. Scrapy Pipelines:
    • 编写Scrapy Pipelines处理抓取到的Item。
    • 配置Pipeline在settings.py中。
  8. 异常处理:
    • 处理可能出现的异常,例如超时、连接错误等。
  9. 数据存储:
    • 将抓取到的数据保存到不同的存储介质,如文件、数据库等。
  10. 用户代理和IP代理:
    • 设置和使用用户代理和IP代理,以避免被封禁。
  11. 异步和并发:
    • 配置异步和并发请求以提高爬取效率。
  12. Scrapy Settings:
    • 配置Scrapy的Settings,包括用户代理、下载延迟等。
  13. Web爬取伦理:
    • 了解爬虫的伦理和法律问题,避免对网站造成不必要的压力。
  14. 日志和调试:
    • 使用Scrapy的日志系统进行调试。
  15. 扩展和定制:
    • 定制和扩展Scrapy,满足特定需求。

程序思路

  1. 首先,因为我们要抓取网页中的标题、链接和评论数,所以我们首先得写items.py
  2. 在这里添加完我们需要爬取的哪些数据后,我们在转向我们的爬虫文件,我们通过 scrapy genspider dd dangdang.com 创建了一个爬虫文件dd.py
  3. 然后开始撰写settings.py
  4. 最后编写pipelines.py文件了(也就是可以正式操作数据了)。

 实验数据与结果分析:(含运行结果截屏)

【实验结果】

【结果分析】

         利用Scrapy框架抓取了当当网站商品信息,并通过ppline.py将数据存储到了mysql数据库中,可以以不同数据存储方式存储。

实验小结:(包括问题和解决方法、心得体会、意见与建议等)

         在进行这个实验的过程中,我首先面临的挑战是网站结构的变化。由于当当网站可能会定期更新,导致之前编写的爬虫代码无法正确提取信息。为了解决这个问题,我学习了如何动态调整选择器以适应变化的网页结构,并通过查看网页源代码来快速调整选择器,确保爬虫的准确性。

         在实验中,我深刻体会到Scrapy框架的强大之处。通过定义Item、编写Spider、配置Pipeline等步骤,我成功地构建了一个功能强大的爬虫,能够高效地抓取和处理目标网站的信息。学会使用Scrapy的中间件和设置,我更好地掌握了爬虫的并发和异步请求的处理方式,提高了爬取效率。

         通过实验,我还发现了对数据进行实时分析和监控的重要性。及时发现并解决异常情况,如数据缺失、异常格式等,有助于提高爬虫的稳定性。此外,通过对数据进行统计和可视化分析,我更全面地了解了抓取到的信息,发现了一些潜在的趋势和规律。通过这个实验,我不仅掌握了Scrapy框架的使用,还培养了解决实际问题的能力,让我受益匪浅。

实验源代码清单:(带注释)

item.py:

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy

class DangdangItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field()
    link = scrapy.Field()
    price = scrapy.Field()
    shop = scrapy.Field()
# Scrapy settings for dangdang project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
#     https://docs.scrapy.org/en/latest/topics/settings.html
#     https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
#     https://docs.scrapy.org/en/latest/topics/spider-middleware.html

BOT_NAME = 'dangdang'

SPIDER_MODULES = ['dangdang.spiders']
NEWSPIDER_MODULE = 'dangdang.spiders'

# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = {
      'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
}
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
LOG_LEVEL = 'ERROR'

# Configure maximum concurrent requests performed by Scrapy (default: 16)
#CONCURRENT_REQUESTS = 32

# Configure a delay for requests for the same website (default: 0)
# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
#DOWNLOAD_DELAY = 3
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16

# Disable cookies (enabled by default)
#COOKIES_ENABLED = False

# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False

# Override the default request headers:
#DEFAULT_REQUEST_HEADERS = {
#   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
#   'Accept-Language': 'en',
#}

# Enable or disable spider middlewares
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
#SPIDER_MIDDLEWARES = {
#    'dangdang.middlewares.DangdangSpiderMiddleware': 543,
#}

# Enable or disable downloader middlewares
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
DOWNLOADER_MIDDLEWARES = {
   'dangdang.middlewares.DangdangDownloaderMiddleware': 543,
}

# Enable or disable extensions
# See https://docs.scrapy.org/en/latest/topics/extensions.html
#EXTENSIONS = {
#    'scrapy.extensions.telnet.TelnetConsole': None,
#}

# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
   'dangdang.pipelines.DangdangPipeline': 300,
}

# Enable and configure the AutoThrottle extension (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/autothrottle.html
#AUTOTHROTTLE_ENABLED = True
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False

# Enable and configure HTTP caching (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

Pipline.py

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html

# useful for handling different item types with a single interface
#from itemadapter import ItemAdapter
#from pymongo import MongoClient

class DangdangPipeline:
    def __init__(self):
        self.client = MongoClient(host='localhost',port=27017)
        self.db = self.client['当当']
        self.collections = self.db['python爬虫']

    def process_item(self, item, spider):
        data = {
            'title': item['title'],
            'link': item['link'],
            'price': item['price'],
            'shop': item['shop'],
        }
        print(data)
        self.collections.insert(data)
        return item

dd.py

import scrapy
from dangdang.items import DangdangItem

class DdSpider(scrapy.Spider):
    name = 'dd'
    # allowed_domains = ['www.dangdang.com']
    start_urls = ['http://search.dangdang.com/?key=python%C5%C0%B3%E6&act=input&page_index=1']

    def parse(self, response):
        item = DangdangItem()
        li_lists = response.xpath('//*[@id="component_59"]/li')
        for li_list in li_lists:
            title = li_list.xpath('./p[1]/a/@title').extract()[0]
            link = 'http:'+li_list.xpath('./p[1]/a/@href').extract()[0]
            price = li_list.xpath('./p[3]/span/text()').extract()[0]
            shop = li_list.xpath('./p[4]/a/text()').extract()[0]
            item['title'] = title
            item['link'] = link
            item['price'] = price
            item['shop'] = shop
            # print(title)
            # print(link)
            # print(price)
            # print(shop)
            # print('*'*100)
            yield item

        for page in range(2,101):
            url = f'http://search.dangdang.com/?key=python%C5%C0%B3%E6&act=input&page_index={page}'
            result = scrapy.Request(url,callback=self.parse)
            yield result

项目总结构为:

               

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1601195.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软考 系统架构设计师系列知识点之大数据设计理论与实践(8)

接前一篇文章:软考 系统架构设计师系列知识点之大数据设计理论与实践(7) 所属章节: 第19章. 大数据架构设计理论与实践 第3节 Lambda架构 19.3.3 Lambda架构介绍 1. 批处理层 2. 加速层 对加速层批处理视图建立索引&#xff0c…

如何将Oracle 中的部分不兼容对象迁移到 OceanBase

本文总结分析了 Oracle 迁移至 OceanBase 时,在出现三种不兼容对象的情况时的处理策略以及迁移前的预检方式,通过提前发现并处理这些问题,可以有效规避迁移过程中的报错风险。 作者:余振兴,爱可生 DBA 团队成员&#x…

【网络编程】如何创建一个自己的并发服务器?

hello !大家好呀! 欢迎大家来到我的网络编程系列之如何创建一个自己的并发服务器,在这篇文章中,你将会学习到在Linux内核中如何创建一个自己的并发服务器,并且我会给出源码进行剖析,以及手绘UML图来帮助大家…

基于Docker构建CI/CD工具链(十)总结

我们用九篇文章简单的介绍了使用Docker构建CICD工具链,希望对你的工作有所帮助。 基于Docker构建CI/CD工具链(一)构建基础工具镜像 基于Docker构建CI/CD工具链(二)快速搭建Gitlab代码库 基于Docker构建CI/CD工具链&…

【DM8】ODBC

官网下载ODBC https://www.unixodbc.org/ 上传到linux系统中 /mnt下 [rootstudy ~]#cd /mnt [rootstudy mnt]# tar -zxvf unixODBC-2.3.12.tar.gz [rootstudy mnt]# cd unixODBC-2.3.12/ [rootstudy unixODBC-2.3.12]# ./configure 注意:若是报以上错 则是gcc未安…

[计算机效率] 网站推荐:格式转换类

4.2 格式转换类 在日常办公和学习中,我们经常需要将不同格式的文件进行转换,特别是PDF文件,因其跨平台、易阅读的特性而备受青睐。然而,PDF文件的编辑和转换往往是一个棘手的问题。今天,我为大家推荐一系列优质的文件…

笔试题2 -- 字符串数组中指定字符串间的最短距离

字符串数组中指定字符串间的最短距离 文章目录 字符串数组中指定字符串间的最短距离题目还原解法一:暴力遍历 (HashVector法)解法二:算法改进 (双指针法)总结 题目链接: 数组中两个字符串的最小距离 – 牛客网 题目还原 给定一个字符串数组s…

速卖通、阿里国际站自养买家账号补单测评核心问题

补单在跨境电商中扮演着重要的角色,卖家们了解到补单可以快速增加产品的销量、评论数量,提升排名,从而打造爆款产品。产品的购买率和评价对于转化率和平台排名至关重要! 当排名不断提高,带来的流量也会增加&#xff0…

机器学习和深度学习--李宏毅(笔记与个人理解)Day17

Day 17Convolutional Neyral Network (CNN) 卷积神经网络一般都用在image 上面比较多一些,所以课程的例子大多数也都是image Image Classification the same size how about for pc? 这里对于tensor 张量这个概念,我还是比较奇怪,在我认为一…

java混淆的公司有哪些

一些提供 Java 混淆服务的公司包括: PreEmptive Solutions:PreEmptive Solutions 提供了一系列用于保护 Java 和 .NET 应用程序的工具,包括混淆、代码压缩、加密和漏洞检测等功能。 DexGuard:DexGuard 是 Guardsquare 公司推出的…

ubuntu磁盘文件损坏不能启动的修复方法

目录 1.错误现象2.解决 1.错误现象 今天早上启动虚拟机中的ubuntu发生如下错误,不能正常启动 2.解决 根据上面的提示可以运行以下命令修复: e2fsck /dev/sda1 #根据提示输入y reboot重启后ubuntu系统正常.

HR面试潜台词_弹性工作不强制考勤=做不完就要加班 扁平管理化=没有升职空间 原则上不鼓励加班=

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞…

【Leetcode每日一题】 递归 - 二叉树的所有路径(难度⭐)(59)

1. 题目解析 题目链接:257. 二叉树的所有路径 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 针对二叉树路径的求解问题,我们可以采用深度优先遍历(DFS)的策略来寻找所…

【LAMMPS学习】八、基础知识(3.3)使用分布式网格

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

筑牢个人信息安全防线,海云安受邀参加武汉“名家论坛”国家安全教育日专题讲座

近日,武汉“名家论坛”国家安全教育日专题讲座活动《“刷脸”有风险,如何保护我们的个人信息安全?》在武汉图书馆报告厅举办,海云安副总工程师李博士受邀参加本次活动。 活动以线下讲座、线上直播的形式,结合“普法讲座…

【数据结构1-基本概念和术语】

这里写自定义目录标题 0.数据,数据元素,数据项,数据对项,数据结构,逻辑结构,存储结构1.结构1.1逻辑结构1.2存储结构1.2.1 顺序结构1.2.2链式结构 1.3数据结构1.3.1基本数据类型1.3.2抽象数据类型1.3.2.1一个…

算法学习——LeetCode力扣补充篇9(912. 排序数组、21. 合并两个有序链表、33. 搜索旋转排序数组、103. 二叉树的锯齿形层序遍历)

算法学习——LeetCode力扣补充篇9 912. 排序数组 912. 排序数组 - 力扣(LeetCode) 描述 给你一个整数数组 nums,请你将该数组升序排列。 示例 示例 1: 输入:nums [5,2,3,1] 输出:[1,2,3,5] 示例 2&…

Qt+vstudio2022的报错信息积累

从今天开始记录一下平常开发工作中的报错记录,后续有错误动态补充! 报错信息:【MSB8041】此项目需要 MFC 库。从 Visual Studio 安装程序(单个组件选项卡)为正在使用的任何工具集和体系结构安装它们。 解决: 背景:换…

4个步骤:如何使用 SwiftSoup 和爬虫代理获取网站视频

摘要/导言 在本文中,我们将探讨如何使用 SwiftSoup 库和爬虫代理技术来获取网站上的视频资源。我们将介绍一种简洁、可靠的方法,以及实现这一目标所需的步骤。 背景/引言 随着互联网的迅速发展,爬虫技术在今天的数字世界中扮演着越来越重要…

潮玩宇宙小程序定制大逃杀游戏APP开发H5游戏

游戏名称:潮玩宇宙大逃杀 游戏类型:休闲竞技类小游戏 游戏目标:玩家通过选择房间躲避杀手,生存下来并瓜分被杀房间的元宝。 核心功能 房间选择:玩家进入游戏后,可以选择一间房间躲避杀手。杀手行动&…