一个Scrapy爬虫实例

一个Scrapy爬虫实例目录Scrapy是啥Scrapy的安装实例:爬取美剧天堂new100:(1)创建工程:(2) 创建爬虫程序(3) 编辑爬虫(4)设置item模板:(5) 设置配置文件(6)设置数据处理脚本:(7)运行爬虫Scrapy是啥scrapy是一个使用python编写的开源网络爬虫框架。这里的框架实际上就是应用程序的骨架,是一个半成品,框架能够保证程序结构风格统一。Scrapy的安装pipinstallScrapy。但在此之前要先安装几个包:在cmd中运行以下语句:(1) pipinstallwh

大家好,又见面了,我是你们的朋友全栈君。

Scrapy是啥

scrapy是一个使用python编写的开源网络爬虫框架。这里的框架实际上就是应用程序的骨架,是一个半成品,框架能够保证程序结构风格统一。

Scrapy的安装

pip install Scrapy。但在此之前要先安装几个包:
在cmd中运行以下语句:
(1) pip install wheel
(2) pip install lxml
(3) pip install twisted
(4) 最后 pip install scrapy
(5) 验证Scrapy框架是否安装成功:
打开python,试试import scrapy 和scrapy.version_info
验证安装
如图看到Scrapy库的版本为2.4.1

实例:爬取美剧天堂new100:

(1)创建工程:

找一个文件夹,打开cmd进入该目录。
输入命令:
Scrapy startproject movie
在这里插入图片描述
这时可以看到该目录下多了一个叫movie的文件夹,而这个文件夹里面还有一个叫movie的文件夹,里面是这样的:
在这里插入图片描述
这样Scrapy项目就成功创建了。

(2) 创建爬虫程序

用cd先进入movie目录,输入命令:
Scrapy genspider meiju meijutt.tv
在这里插入图片描述
该命令创建了一个叫meiju的爬虫
这时查看spiders目录可以看到多了一个meiju.py,就是我们刚创建的爬虫。

(3) 编辑爬虫

用编辑器打开meiju.py
这是我们的目标
这个网站的内容是我们的爬取目标

import scrapy
from movie.items import MovieItem

class MeijuSpider(scrapy.Spider):  # 继承这个类
    name = 'meiju'  #名字
    allowed_domains = ['meijutt.tv']  # 域名
    start_urls = ['https://www.meijutt.tv/new100.html']  # 要补充完整

    def parse(self, response):
        movies = response.xpath('//ul[@class="top-list fn-clear"]/li')  # 看不懂
        for each_movie in movies:
        item = MovieItem()
        item['name'] = each_movie.xpath('./h5/a/@title').extract()[0]
        yield item  # 一种特殊的循环

(4)设置item模板:

在items中输入:

import scrapy


class MovieItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
name = scrapy.Field()

(5) 设置配置文件

在settings.py中增加代码:

ITEM_PIPELINES = { 
   'movie.pipelines.MoviePipeline':100}

(6)设置数据处理脚本:

在pipelines.py中输入代码:

import json

class MoviePipeline(object):
    def process_item(self, item, spider):
        return item

(7)运行爬虫

在爬虫根目录执行命令:
Scrapy crawl meiju

Emm发现meiju.py有错误,看了一下是由于冒号后面的语句没有缩进。

现在看看那两个xpath选择器的内容:

movies = response.xpath('//ul[@class="top-list fn-clear"]/li')
        # 意思是选中所有的属性class值为"top-list fn-clear"的ul下的li标签内容

在这里插入图片描述

也就是说movies得到的是li标签之间的内容的列表

for each_movie in movies:
            item = MovieItem()
            item['name'] = each_movie.xpath('./h5/a/@title').extract()[0]
            # .表示选取当前节点,也就是对每一项li,其下的h5下的a标签中title的属性值
            yield item  # 一种特殊的循环

修改增加缩进,并修改第一个xpath的内容后再次运行:
在这里插入图片描述

可以看到爬取成功

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153134.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java8 stream数组转List[通俗易懂]

    Java8 stream数组转List[通俗易懂]双重检查锁(Double-checkedLocking)可以降低直接使用synchronized同步共享资源带来的性能开销,使用DCL实现延迟加载的代码如下:1publicclassDoubleCheckedLocking{2 privatestaticInstanceinstance;3 publicstaticInstancegetInstance(){4 …

    2022年8月23日
    5
  • springmvc上传文件过程(c菜鸟教程)

    UploadControllerpackagecom.jege.spring.mvc;importjava.io.File;importjava.io.FileOutputStream;importjava.io.InputStream;importjavax.servlet.http.HttpServletRequest;importorg.apache.co

    2022年4月11日
    96
  • jetty和tomcat性能比较_tomcat启动jar包

    jetty和tomcat性能比较_tomcat启动jar包相同点1.tomcat与jetty都是一种servlet引擎,他们都支持标准的servlet规范和javaEE规范不同点1.架构比较jetty相比tomcat更为简单jetty架构是基于Handler来实现的,主要的扩展功能都可以用Handler来实现,扩展简单tomcat的框架是基于容量设计的,进行扩展是需要了解tomcat的整体设计结构,不易扩展2.性能比较

    2025年8月3日
    3
  • 跨网段远程网络唤醒计算机,远程唤醒及跨网段远程唤醒

    跨网段远程网络唤醒计算机,远程唤醒及跨网段远程唤醒远程唤醒:1、除了在BIOS中开启远程唤醒功能外,有些主板要求开启以下功能:ACBackFunction(设置掉电重启后系统的状态)主板的来电唤醒功能比如一插电源线主机就启动看你想怎么设置了使用远程唤醒将“ACBACKFunction”设置为“Full-on”即可关机,开机,先前的状态(原来开时后来电就马上开机,原来关机后来电时还保持关机状态)2、另外,有些网卡还要在其属性中进行另外…

    2022年6月2日
    37
  • Java面试宝典4.0版

    Java面试宝典4.0版JAVA面试宝典V4.0版本基础1.简述JDK跟JRE的区别Jdk是java开发人员在开发过程使用的软件开发包,他提供了java的开发环境和运行环境JRE是JavaRuntimeEnviroment是指Java的运行环境如果你只想跑java程序,只要安装jre就够了,如果要从事开发就得安装jdk2.简述path跟classpat…

    2026年1月30日
    5
  • 96道前端面试题+前端常用算法「建议收藏」

    96道前端面试题+前端常用算法「建议收藏」这篇文章主要分享一些收集整理的面试题,希望能对大家有所帮助。字节一面:1,说一下浏览器缓存2,cookie与session的区别3,浏览器如何做到session的功能的。4,解释一下:csrf和xss5,怎么防止csrf和xss6,跨域的处理方案有哪些7,CORS是如何做的?8,对于CORS,Get和POST有区别吗?9,了解HTTPS的过程吗?10,esmodule和commonjs的区别11,react里如何做动态加载12,动.

    2022年8月28日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号