基于Centos7+pycharm搭建python获取爬虫小项目

2023-10-26

.安装python环境

网上教程查阅

安装成功后运行:python

查看版本:python-V



.安装pycharm

应在步骤一完成后进行

pycharm官网下载最新版本

下载链接:https://www.jetbrains.com/pycharm/


.创建Scrapy项目

1.Scrapy的安装

ScrapyPython开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpidersitemap爬虫等,最新版本又提供了web2.0爬虫的支持。

由于Scrapy框架不是Python的标准模块,因此我们需要先安装Scrapy

使用命令

pipinstall scrapy


安装中若报错的话根据相应提示进行缺少模块的安装与更新即可

注:若显示部分模块已存在但版本过低的情况,只需执行:

pipuninstall 模块名称 //删除已有模块

pipinstall 模块名称 //安装模块-安装最新版本

来尝试解决问题


2.Scrapy项目的创建


2.1scrapy项目创建语法

scrapystartproject 工程名称




2.2Spider爬虫创建语法

scrapygenspider  爬虫程序名称  访问的域名




进入到爬虫项目文件夹


到这里,我们的Scrapy项目文件创建完成


使用pycharm工具打开我们刚才创建的weatherSpider项目,可看到它的目录文件如下:



Scrapy项目下的常用文件说明:

scrapy.cfg:该文件为Scrapy项目的核心配置文件,设置项目默认配置文件路径名称以及项目发布名称等信息

items.py:该文件的作用是设置网络采集的每条数据的共同属性,它就是一个实体自定义模块,用于定义每条采集数据的属性

pipelines.py:该文件的作用是将爬虫每次爬取到单位信息进行后续处理,比如写入到txt文件或将采集到的数据添加到数据库等,根据不同的存储方式,则需要创建不同的pipelines.py文件进行相关处理操作

settings.py:该文件的作用是整个项目的配置驱动文件,我们自定义的piplines.py则需要在该文件中进行配置才可以正常使用,否则项目不进行后续数据处理

spiders:一个文件夹,我们爬虫项目文件会自动生成在该文件夹中



.数据的爬取

步骤

1.item.py实体类文件中定义我们要爬取的数据

2.爬虫主程序weatherspider.py实现

3.获取到的数据的处理(控制台,文本,jsonmysql数据库)

4.setting.py文件配置

5.运行项目查看结果

执行命令:scrapycrawl weatherspider


1.item.py实体类文件中定义我们要爬取的数据

这时需要导入scrapy下的item.py文件中的Item类和Filed


import scrapy
from scrapy.item import Item,Field
class WeatherspiderItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    #日期
    date=scrapy.Field()
    #天气状况
    wea=scrapy.Field()
    #最高温度
    temp_max=scrapy.Field()
    #最低温度
    temp_min=scrapy.Field()
    pass

2.爬虫主程序weatherspider.py实现

在这里面我们需要更改的只有status_urls去指定我们需要数据的具体网页

其次是重写这个类中的parse方法:来获取我们需要的数据

import sys
import scrapy
from weatherSpider.items import WeatherspiderItem
default_encoding='utf-8'
if sys.getdefaultencoding() != default_encoding:
    reload(sys)
    sys.setdefaultencoding(default_encoding)
class WeatherspiderSpider(scrapy.Spider):
    name = 'weatherspider'
    allowed_domains = ['www.weather.com.cn']
    start_urls = ['http://www.weather.com.cn/weather/101100101.shtml']
    def parse(self, response):
        current_item=response.xpath('//div[@class="c7d"]/ul/li')
        #获取当前页面中的天气信息标签并生成一个列表
        weather = WeatherspiderItem()
        weather['date'] = current_item.xpath('h1/text()').extract()
        weather['wea'] = current_item.xpath('p[@class="wea"]/text()').extract()
        weather['temp_max'] = current_item.xpath('p[@class="tem"]/span/text()').extract()
        weather['temp_min'] = current_item.xpath('p[@class="tem"]/i/text()').extract()
        yield weather
        pass


3.获取到的数据的处理

3.1在控制台输出


def process_item(self, item, spider):
    for i in range(7):
        print u'日期:', item['date'][i]
        print u'天气状况:', item['wea'][i]
        print u'最高温度:', item['temp_max'][i]
        print u'最低温度:', item['temp_min'][i]
    return item

3.2将数据写入txt文本

import os
import time
class WeatherspiderPipeline(object):
    def __init__(self):
        #创建文件夹
        self.folder_name='output'
        if not os.path.exists(self.folder_name):
            os.mkdir(self.folder_name)
            pass
    def process_item(self, item, spider):
        currentTime=time.strftime("%Y-%m-%d",time.localtime())
        fileName='weather-7'+currentTime+'.txt'
        try:
            with open(self.folder_name+'/'+fileName,'a') as fp:
                for i in range(7):
                    fp.write(u'日期:' + item['date'][i])
                    fp.write(u'天气状况:' + item['wea'][i])
                    fp.write(u'最低温度:' + item['temp_min'][i] + '\n')
                    pass
        except EOFError as er:
            print er
            pass
        finally:
            fp.close()
            pass
        return item

3.3将数据写成json形式

class WeatherspiderPipeline(object):
    def __init__(self):
        #创建文件夹
        self.folder_name='output'
        if not os.path.exists(self.folder_name):
            os.mkdir(self.folder_name)
            pass
    def process_item(self, item, spider):
        currentTime=time.strftime("%Y-%m-%d",time.localtime())
        fileName='weather-7'+currentTime+'.json'
        try:
            with codecs.open(self.folder_name+'/'+fileName,'a') as fp:
                jsonLine=json.dumps(dict(item),ensure_ascii=False)+'\n'
                fp.write(jsonLine)
            with open(self.folder_name+'/'+fileName,'a') as fp:
                 pass
        except EOFError as er:
            print er
            pass
        finally:
            fp.close()
            pass
        return item



3.4将数据写入mysql数据库

#MySQLdb需要下载安装

import MySQLdb
class WeatherspiderPipeline(object):
    def process_item(self, item, spider):
        conn=MySQLdb.connect(host='localhost',user='root',passwd='***',db='lv',port=3306)
        conn.begin()#开始事物
        conn.set_character_set('utf8')
        #得到游标对象
        c=conn.cursor()
        c.execute('SET NAMES utf8')
        c.execute('SET CHARACTER SET utf8')
        c.execute('SET character_set_connection=utf8 ')
        #执行SQL语句
        for i in range(7):
            date=item['date'][i]
            wea=item['wea'][i]
            temp_max=item['temp_max'][i]
            temp_min=item['temp_min'][i]
            sql='INSERT INTO weather VALUES(%s,%s,%s,%s)'
            c.execute(sql,(date,wea,temp_max,temp_min))
            conn.commit() #提交事物
            print '----------------'
        return item


4.settind.py文件配置

该文件的作用是整个项目的配置驱动文件,我们自定义的piplines.py则需要在该文件中进行配置才可以正常使用,否则项目不进行后续数据处理

ITEM_PIPELINES = {
  # 'weatherSpider.pipelines.WeatherspiderPipeline': 300,
   # 'weatherSpider.pipelines2txt.WeatherspiderPipeline': 1,
    'weatherSpider.pipelines2json.WeatherspiderPipeline': 1,
    'weatherSpider.pipelines2mysql.WeatherspiderPipeline': 1,
}
# 配置动态代理模块
DOWNLOADER_MIDDLEWARES = {
        'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware' : None,
        'weatherSpider.rotate_useragent.RotateUserAgentMiddleware' :400}


5.运行项目查看结果

执行命令:scrapycrawl weatherspider


控制台




mysql数据库





本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于Centos7+pycharm搭建python获取爬虫小项目 的相关文章

随机推荐

  • 使用docker快速搭建服务器环境

    思路 将nginx mysql tomcat等环境打包为一个个docker 然后使用docker compose管理 服务器内安装docker相关环境 然后直接运行docker compose配置 即可快速搭建完成服务器环境 之后可以将相关
  • Markdown / KaTex数学公式汇总

    目录 LaTex和KaTex 软件推荐 Mathpix 一 如何插入公式 二 上下标 三 常用运算符 四 高级运算符 五 常用数学符号 六 特殊符号 6 1 箭头 6 2 公式序号 七 括号使用 八 矩阵 九 集合运算 十 希腊字母 十一
  • 使用反射实现动态修改@Excel的注解属性

    业务场景 我们使用poi实现数据导出时 通常是根据 Excel name xxx 来确定列名 通常情况下这个是不会发生变动的 但这里就说少数情况 在我们需要这里根据某些情况来进行改变的时候 我们就需要用到反射 AirQualityRanki
  • Java反射(自己的理解)

    动态语言 运行是代码可以根据某些条件改变自身结构 像js和php python等 但是我们不像c 是一门静态语言 可以准确的说我们是一门准动态语言 因为反射让我们具有动态性 我来直接用我所理解的反射给大家先讲一下大概 这绝对让你的耳目一新
  • 五、单向散列函数

    单向散列函数 获取消息的指纹 当需要比较两条消息是否一致时 我们不必直接对比消息本身的内容 只要对比它们的 指纹 就可以了 单向散列函数 one wayftnction 有一个输人和一个输出 其中输人称为消息 message 输出称为散列值
  • 全国大学生数字建模竞赛、中国研究生数学建模竞赛(数学建模与计算实验)前言

    1 什么是数学建模 2 所需要学的知识 知识算法分类表格汇总 3 所需要的软件工具 4 论文模板 查找文献 查找数据 一 什么是数学建模 全国大学生数字建模竞赛 National College Student Mathematical M
  • HashMap源码初探

    Hash table based implementation of the Map interface This implementation provides all of the optional map operations and
  • Qt动态库加载之 QLibrary

    目录 一 使用Qt编译C动态库 二 使用QLibrary调用共享库 一 使用Qt编译C动态库 使用Qt新建一个C项目 cbb frame 在项目中我们声明和定义两个函数 并导出函数 在cbb mylog中我们使用了函数指针 这里为啥这样干
  • python人脸识别考勤系统 dlib+OpenCV和Pyqt5、数据库sqlite 人脸识别系统 计算机 毕业设计 源码

    一 项目介绍 Python语言 dlib OpenCV Pyqt5界面设计 sqlite3数据库 本系统使用dlib作为人脸识别工具 dlib提供一个方法可将人脸图片数据映射到128维度的空间向量 如果两张图片来源于同一个人 那么两个图片所
  • hrformer

    High Resolution Transformer Copyright c 2021 Microsoft Licensed under The MIT License see LICENSE for details Written by
  • keepalived 实现双机热备

    文章目录 一 说明 二 概念解释 三 环境准备 四 操作过程 五 验证 一 说明 我们经常听说 nginx keepalived 双机热备 其实在这里 双机热备有两种思路 一是只利用 keepalived 实现两个节点的故障切换 当主节点挂
  • 章节二:Vue.js的安装和配置

    2 1 下载和安装Vue js 要下载和安装Vue js 你有几个选项可供选择 通过CDN 在HTML文件中引入Vue js的CDN链接 然后直接使用Vue全局变量 使用包管理器 使用npm或yarn等包管理器 在项目中安装Vue js 下
  • 一文搞懂IP基础以及子网划分!!!!!

    1 什么是IP地址 IP地址 Internet Protocol Address 互联网国际地址 是一种在Internet上的给主机编址的方式 它主要是为互联网上的每一个网络和每一台主机分配一个逻辑地址 以此来屏蔽物理地址的差异 IP地址就
  • Reactjs鼠标滚轮监听

    1 添加相应的react所需的包及插件 npm install react s npm install react dom s 2 鼠标滚轮事件及引用子组件的滚轮处理事件 handleWheel function event 判断鼠标滚轮的
  • JavaBean配置

    在JSP内嵌入大量的Java代码可能会造成维护不方便 为此最好的方就是把JSP代码和Java代码分开 将JSP中的Java代码移植到Java类中 这些可能用到的类就是JavaBean JavaBean实现步骤如下 1 在src中新建一个be
  • 微型计算机上的南桥芯片功能,微型计算机主板上安装的主要部件

    如下 1 芯片组 芯片组是构成主板电路的核心 决定了主板的级别和档次 北桥芯片是主板上最重要的芯片 主要负责与CPU 内存 显卡进行通讯 南桥芯片负责连接硬盘 USB 接口 PCI 接口等其他接口 南桥芯片和北桥芯片之间也有联系 2 存储控
  • 洋桃电子STM32物联网入门30步笔记三、CubeMX图形化编程、设置开发板上的IO口

    此文档作为对杨桃电子视频的整理 B站链接 第四集 一 开启RCC的外部时钟 包括外部高速时钟HSE和外部低速时钟LSE 时钟配置三个选项的含义 选择禁用的话就只能使用内部时钟 旁路时钟源一般是有源晶振 晶体与陶瓷振荡器一般是无源晶振 二 开
  • 利用JS获取IE客户端IP及MAC的实现

    在做B S结构的系统时 我们常常需要获取客户端的一些信息 如IP和MAC 以结合身份验证 在ASP NET中 要获取服务器端的MAC很容易 但是要获取客户端的MAC的地址确要花费一翻心思 通常的做法是调用Win32API或直接调用nbtst
  • MySQL技术内幕InnoDB存储引擎 学习笔记 第六章 锁

    锁是数据库系统区别于文件系统的一个关键特性 锁机制用于管理对共享资源的并发访问 InnoDB引擎会对表数据上锁以提供数据的完整性和一致性 除此之外 还会对数据库内部其他多个地方使用锁 从而保证对多种不同资源提供并发访问 如增删改LRU列表中
  • 基于Centos7+pycharm搭建python获取爬虫小项目

    一 安装python环境 网上教程查阅 安装成功后运行 python 查看版本 python V 二 安装pycharm 应在步骤一完成后进行 到pycharm官网下载最新版本 下载链接 https www jetbrains com py