scrapy爬虫框架入门实例

news/2024/7/19 13:10:00 标签: python, java, nginx, js, django
js_content">

安装scrapy

因为用的是anaconda,所以直接pip install scrapy就成功了。如果不成功可以pip install lxml先,可以查看下版本

scrapy --version
Scrapy 1.7.1 - project: tutorial

scrapy组件和流程

一个简单的项目实例(爬猫眼电影排行)

用终端创建,cd到你放scrapy项目的文件夹,然后开始项目maoyan是你的项目名,自己取名

nginx">scrapy startproject maoyan

项目结构

文件 功能

scrapy.cfg 配置文件

spiders 存放你Spider文件,也就是你爬取的py文件

items.py文件 相当于一个容器,和字典较像

middlewares.py文件 定义Downloader Middlewares(下载器中间件)和Spider Middlewares(蜘蛛中间件)的实现

pipelines.py文件 定义Item Pipeline的实现,实现数据的清洗,储存,验证。

settings.py文件 全局配置

分析要爬取的网页和内容

要爬取的网址是’https://maoyan.com/board/4?offset=0’ 然后往后的十个网页,写成列表

然后是要爬取的内容:电影名、评分、主演等

创建一个spider

属性或方法 作用

name 是项目的名字

allowed_domains 是允许爬取的域名,比如一些网站有相关链接,域名就和本网站不同,这些就会忽略。

start_urls 要访问的地址列表,和start_requests方法只需要定义一个,都是调用parse方法解析

start_requests方法 由此方法通过下面链接爬取页面

parse方法 是Spider的一个方法,在请求start_url后,之后的方法,这个方法是对网页的解析,与提取自己想要的东西。

response参数 是请求网页后返回的内容,也就是你需要解析的网页。

python">import scrapy




class MySpider(scrapy.Spider):
    name = 'maoyan'  # 项目名
    allowed_domains = ['maoyan.com']  # 允许访问的域名




    def start_requests(self):
        url_list = []
        for i in range(0,10):
            url_list.append('https://maoyan.com/board/4?offset='+str(i))
        # 定义爬取的链接
        urls = url_list
        for url in urls:
            # 爬取到的页面如何处理?提交给parse方法处理
            yield scrapy.Request(url=url, callback=self.parse)




    def parse(self, response):
        pass

定义需要的item

item是保存爬取数据的容器,使用的方法和字典差不多。

我们打开items.py文件,之后我们想要提取的信息有:

index(排名)、title(电影名)、star(主演)、releasetime(上映时间)、score(评分)

class MaoyanItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    index = scrapy.Field()
    title = scrapy.Field()
    star = scrapy.Field()
    releasetime = scrapy.Field()
    score = scrapy.Field()

然后修改spider的方法来获取信息

python">from maoyan.items import MaoyanItem
...
    def parse(self, response):
        '''
        start_requests已经爬取到页面,那如何提取我们想要的内容呢?那就可以在这个方法里面定义。
        1、定义链接;
        2、通过链接爬取(下载)页面;
        3、定义规则,然后提取数据;
        '''
        # 这里用的css选择查找信息,也可以用xpath
        dl = response.css('.board-wrapper dd')
        for dd in dl:
            item = MaoyanItem()
            # extract()[0]等同于extract_first()
            item['index'] = dd.css('.board-index::text').extract_first()
            item['title'] = dd.css('.name a::text').extract_first()
            # strip方法是去除空格和换行符
            item['star'] = dd.css('.star::text').extract_first().strip()
            item['releasetime'] = dd.css('.releasetime::text').extract_first()
            item['score'] = dd.css('.integer::text').extract_first()+dd.css('.fraction::text').extract_first()
            yield item
 ...

运行并保存

这样就写完了一个简单的项目,运行即可:

在终端的当前文件夹下输入:scrapy crawl maoyan(项目的名字)

这样只运行了代码,并没有保存,保存有多种方式

-o maoyan.csv或者-o maoyan.xml或者-o maoyan.json

设置编码格式 -s FEED_EXPORT_ENCODING=UTF8

选择csv(表格)格式保存看看:scrapy crawl maoyan -o maoyan.csv -s FEED_EXPORT_ENCODING=UTF8

找到文件并打开:


http://www.niftyadmin.cn/n/740027.html

相关文章

mysql bug 提交_MySQL工作(执行)流程

下面是一张简单的数据库执行流程图:下面从数据库架构的角度介绍数据库的工作流程:1. 连接层1)连接处理:客户端同数据库服务层通过连接管理模块建立 TCP 连接,并请求一个连接线程。如果连接池中有空闲的连接线程,则分配…

Python之多线程爬虫抓取网页图片的示例代码

本篇文章主要介绍了Python之多线程爬虫抓取网页图片的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧目标嗯,我们知道搜索或浏览网站时会有很多精美、漂亮的图片。我们下载的时候&#xff0…

mysql数据表取模分代表码_mysql 取模分表

取模分表,根据时间维度进行分表自定义的Hash分表实现原理:利用sqlparser解析sql参数,根据参数修改相关的表名为实际表名。分表后的数据复制,一般采用insert select语句将原有表的数据导入新的分表,或者直接copy原表的数…

在交互式环境中输入表达式

Python 编程语言有许多语法结构、标准库函数和交互式开发环境功能。好在,你可以忽略大多数内容。你只需要学习部分内容,就能编写一些方便的小程序。 但在动手之前,你必须学习一些基本编程概念。就像魔法师培训,你可能认为这些概念…

oracle逗号隔开行转列_oracle如何拆分以逗号分隔的字符串为多列?

最近遇到一个问题,需要把一个带有,的字符串拆分成多列。通过查询资料,这个操作需要使用以下2个关键知识:1. REGEXP_SUBSTR函数这个函数的作用是正则分隔字符串,用法为function REGEXP_SUBSTR(String, pattern, position, occurren…

编程快速上手——让繁琐工作自动化,python基础类之控制流

你已经知道了单条指令的基本知识。程序就是一系列指令。但编程真正的力量不仅在于运行(或“执行”)一条接一条的指令,就像周末的任务清单那样。根据表达式求值的结果, 程序可以决定跳过指令,重复指令,或从几…

python人工智能-pytorch框架之2.3.2梯度

python人工智能-pytorch框架之2.3.2梯度

java 虚拟表_虚拟表和Java中的抽象

这是执行代码的顺序。更多细节如下。> main()>调用Derived。< init>()(隐式nullary构造函数)>调用Base。< init>()>将Base.x设置为1。>调用Derived.foo()>打印Derived.x&#xff0c;它仍然具有默认值0>将Derived.x设置为2。>调用Derived.f…