热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

scrapy爬虫框架你还不会吗?简单使用爬虫框架采集网站数据

前言本文的文字及图片过滤网络,可以学习,交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

前言

本文的文字及图片过滤网络,可以学习,交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

本篇文章就使用python爬虫框架scrapy采集网站的一些数据。

Python爬虫、数据分析、网站开发等案例教程视频免费在线观看

https://space.bilibili.com/523606542

www#gaodaima.com来源gaodai#ma#com搞@代~码网

 

基本开发环境
  • Python 3.6
  • pycharm

如何安装scrapy

在cmd命令行当中 pip install scrapy就可以安装了。但是一般情况都会出现网络超时的情况。

建议切换国内常规源安装 pip install -i国内常规地址包名

例如:

pip install -i  https://mirrors.aliyun.com/pypi/simple/ scrapy

国内常用源别名地址:

清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/ 
豆瓣:http://pypi.douban.com/simple/

你可能会出现的报错:

在安装Scrapy的过程中可能会遇到VC ++等错误,可以安装删除模块的离线包

 

Scrapy如何爬取网站数据

本篇文章以豆瓣电影Top250的数据为例,讲解一下scrapy框架爬取数据的基本流程。

 

豆瓣Top250这个数据就不过多分析,静态网站,网页结构十分适合写爬取,所以很多基础入门的爬虫案例都是以豆瓣电影数据以及猫眼电影数据为例的。

Scrapy的爬虫项目的创建流程

1.创建一个爬虫项目

在Pycharm中选择Terminal在Local里面输入

scrapy startproject +(项目名字<独一无二>)

 

2.cd切换到爬虫项目目录

 

3.创建爬虫文件

scrapy genspider(+爬虫文件的名字<独一无二的>)(+域名限制)

 

 

这就对于scrapy的项目创建以及爬虫文件创建完成了。

Scrapy的爬虫代码编写

1,在settings.py文件中关闭robots协议默认是True

 

2,在爬虫文件下修改起始网址

start_urls = ["https://movie.douban.com/top250?filter="]

把start_urls改成豆瓣导航网址的链接,也就是你爬取数据的第一页的url地址

3,写解析数据的业务逻辑

爬取内容如下:

 

douban_info.py

import scrapy


from ..items import DoubanItem




class DoubanInfoSpider(scrapy.Spider):
    name = "douban_info"
    allowed_domains = ["douban.com"]
    start_urls = ["https://movie.douban.com/top250?start=0&filter="]


    def parse(self, response):
        lis = response.css(".grid_view li")
        print(lis)
        for li in lis:
            title = li.css(".hd span:nth-child(1)::text").get()
            movie_info = li.css(".bd p::text").getall()
            info = "".join(movie_info).strip()
            score = li.css(".rating_num::text").get()
            number = li.css(".star span:nth-child(4)::text").get()
            summary = li.css(".inq::text").get()
            print(title)
            yield DoubanItem(title=title, info=info, score=score, number=number, summary=summary)


        href = response.css("#content .next a::attr(href)").get()
        if href:
            next_url = "https://movie.douban.com/top250" + href
            yield scrapy.Request(url=next_url, callback=self.parse)

itmes.py

import scrapy




class DoubanItem(scrapy.Item):
    # define the fields for your item here like:
    title = scrapy.Field()
    info = scrapy.Field()
    score = scrapy.Field()
    number = scrapy.Field()
    summary = scrapy.Field()

middlewares.py

import faker




def get_COOKIEs():
    """获取COOKIEs的函数"""
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"}


    response = requests.get(url="https://movie.douban.com/top250?start=0&filter=",
                            headers=headers)
    return response.COOKIEs.get_dict()




def get_proxies():
    """代理请求的函数"""
    proxy_data = requests.get(url="http://127.0.0.1:5000/get/").json()
    return proxy_data["proxy"]




class HeadersDownloaderMiddleware:
    """headers中间件"""


    def process_request(self, request, spider):
        # 可以拿到请求体
        fake = faker.Faker()
        # request.headers  拿到请求头, 请求头是一个字典
        request.headers.update(
            {
                "user-agent": fake.user_agent(),
            }
        )
        return None


class COOKIEDownloaderMiddleware:
    """COOKIE中间件"""


    def process_request(self, request, spider):
        # request.COOKIEs 设置请求的COOKIEs, 是字典
        # get_COOKIEs()  调用获取COOKIEs的方法
        request.COOKIEs.update(get_COOKIEs())
        return None


class ProxyDownloaderMiddleware:
    """代理中间件"""


    def process_request(self, request, spider):
        # 获取请求的 meta , 字典
        request.meta["proxy"] = get_proxies()
        return None

pipelines.py

import csv




class DoubanPipeline:
    def __init__(self):
        self.file = open("douban.csv", mode="a", encoding="utf-8", newline="")
        self.csv_file = csv.DictWriter(self.file, fieldnames=["title", "info", "score", "number", "summary"])
        self.csv_file.writeheader()


    def process_item(self, item, spider):
        dit = dict(item)
        dit["info"] = dit["info"].replace("
", "").strip()
        self.csv_file.writerow(dit)
        return item




    def spider_closed(self, spider) -> None:
        self.file.close()

setting.py

# Scrapy settings for douban 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 = "douban"


SPIDER_MODULES = ["douban.spiders"]
NEWSPIDER_MODULE = "douban.spiders"




# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = "douban (+http://www.yourdomain.com)"


# Obey robots.txt rules
ROBOTSTXT_OBEY = False


# 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 = {
#    "douban.middlewares.DoubanSpiderMiddleware": 543,
# }


# Enable or disable downloader middlewares
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
DOWNLOADER_MIDDLEWARES = {
   "douban.middlewares.HeadersDownloaderMiddleware": 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 = {
   "douban.pipelines.DoubanPipeline": 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"

4,运行爬虫程序

 

输入命令 scrapy crawl +爬虫文件名

 



推荐阅读
  • Python 3 Scrapy 框架执行流程详解
    本文详细介绍了如何在 Python 3 环境下安装和使用 Scrapy 框架,包括常用命令和执行流程。Scrapy 是一个强大的 Web 抓取框架,适用于数据挖掘、监控和自动化测试等多种场景。 ... [详细]
  • window下的python安装插件,Go语言社区,Golang程序员人脉社 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 在Windows系统中安装TensorFlow GPU版的详细指南与常见问题解决
    在Windows系统中安装TensorFlow GPU版是许多深度学习初学者面临的挑战。本文详细介绍了安装过程中的每一个步骤,并针对常见的问题提供了有效的解决方案。通过本文的指导,读者可以顺利地完成安装并避免常见的陷阱。 ... [详细]
  • 基于 Bottle 框架构建的幽默应用 —— Python 实践 ... [详细]
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • PyTorch 使用问题:解决导入 torch 后 torch.cuda.is_available() 返回 False 的方法
    在配置 PyTorch 时,遇到 `torch.cuda.is_available()` 返回 `False` 的问题。本文总结了多种解决方案,并分享了个人在 PyCharm、Python 和 Anaconda3 环境下成功配置 CUDA 的经验,以帮助读者避免常见错误并顺利使用 GPU 加速。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 在使用 `requests` 库进行 HTTP 请求时,如果遇到 `requests.exceptions.SSLError: HTTPSConnectionPool` 错误,通常是因为 SSL 证书验证失败。解决这一问题的方法包括:检查目标网站的 SSL 证书是否有效、更新本地的 CA 证书库、禁用 SSL 验证(不推荐用于生产环境)或使用自定义的 SSL 上下文。此外,确保 `requests` 库和相关依赖项已更新到最新版本,以避免潜在的安全漏洞。 ... [详细]
  • 利用树莓派畅享落网电台音乐体验
    最近重新拾起了闲置已久的树莓派,这台小巧的开发板已经沉寂了半年多。上个月闲暇时间较多,我决定将其重新启用。恰逢落网电台进行了改版,回忆起之前在树莓派论坛上看到有人用它来播放豆瓣音乐,便萌生了同样的想法。通过一番调试,终于实现了在树莓派上流畅播放落网电台音乐的功能,带来了全新的音乐享受体验。 ... [详细]
  • PyCharm 作为 JetBrains 出品的知名集成开发环境(IDE),提供了丰富的功能和强大的工具支持,包括项目视图、代码结构视图、代码导航、语法高亮、自动补全和错误检测等。本文详细介绍了 PyCharm 的高级使用技巧和程序调试方法,旨在帮助开发者提高编码效率和调试能力。此外,还探讨了如何利用 PyCharm 的插件系统扩展其功能,以满足不同开发场景的需求。 ... [详细]
  • 利用 Python 管道实现父子进程间高效通信 ... [详细]
  • 在Windows环境下离线安装PyTorch GPU版时,首先需确认系统配置,例如本文作者使用的是Win8、CUDA 8.0和Python 3.6.5。用户应根据自身Python和CUDA版本,在PyTorch官网查找并下载相应的.whl文件。此外,建议检查系统环境变量设置,确保CUDA路径正确配置,以避免安装过程中可能出现的兼容性问题。 ... [详细]
  • 本文介绍了如何在 PyCharm 中高效利用 Anaconda 管理项目环境配置。首先,确保已安装必要的软件。以 Windows 10 64位专业版为例,建议使用 PyCharm 2018.2 或更高版本。通过 Anaconda 创建和管理虚拟环境,可以显著提升开发效率,确保项目依赖的一致性和隔离性。文章详细阐述了从安装到配置的每一步操作,帮助开发者快速上手并充分利用这些工具的优势。 ... [详细]
author-avatar
多米音乐_35562359
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有