二皮脸data_2022年网络我的网络爬虫学习心得

1.简述本学期Python爬虫的心得

我从大二开始习python数据挖掘,用来处理数据,分析数据,当时的学习只是浅尝辄止,代码不多且不复杂。这学期又跟随杨鑫老师学习python的另一种用法,即网页爬虫通过向服务器发送请求获取服务器传回信息,再根据其提取所需的信息。原理虽然简单,但是涉及的细节非常多。在学习爬虫时,首先要自己配置爬虫的环境变量,遇到了各种问题,我在一次次报错中学习新的知识,累积到了不少的知识和经验。经过一学期的学习,我成功用scrapy框架爬下了作文网站,最后看自己的代码成功运行并且数据存储到mongdb的时候,我感受到了学以致用的快乐。

2.Python编程基础爬虫应用用到的pip模块

Pandas
Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
BeautifulSoup
beautifulsoup是一个解析器,可以特定的解析出内容,省去了我们编写正则表达式的麻烦。是一个可以从HTML或XML文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式。
Numpy
NumPy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API,有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运算和随机模拟等等。 NumPy包的核心是 ndarray 对象。
requests requests是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到,Requests是Python语言的第三方的库,专门用于发送HTTP请求
Urllib
urllib库是Python内置的HTTP请求库。urllib模块提供的上层接口,使访问www和ftp上的数据就像访问本地文件一样。
Pymysql
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。 PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。
Pymongo
pymongo是python访问MongoDB的模块,使用该模块,我们定义了一个操作MongoDB的类PyMongoClient,包含了连接管理、集合管理、索引管理、增删改查、文件操作、聚合操作等方法。
Scrapy
Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。
Gerapy_auto_extractor
是一个基于 Scrapy、Scrapyd 的分布式爬虫管理框架,自动提取器模块。
gerapy 是一个分布式爬虫管理框架。能帮助我们更方便地控制爬虫运行,更直观地查看爬虫状态,更实时地查看爬取结果,更简单地实现项目部署,更统一地实现主机管理。
Scrapyd
Scrapyd是一个用来部署和运行Scrapy项目的应用,由Scrapy的开发者开发。其可以通过一个简单的Json API来部署(上传)或者控制你的项目。
Sqlalchemy
SQLAlchemy是 Python 编程语言下的一款开源软件。 提供了SQL工具包及 对象关系映射 (ORM)工具,使用 MIT许可证 发行。
Selenium
Selenium是一个用于Web应用程序测试的工具。

3.单个网页数据爬虫

二皮脸data_2022年网络我的网络爬虫学习心得_第1张图片
结果:
二皮脸data_2022年网络我的网络爬虫学习心得_第2张图片

4.多个站点循环爬取数据

Scrapy 框架由五大组件构成,如下:
Engine(引擎),整个 Scrapy 框架的核心,主要负责数据和信号在不同模块间传递。
Scheduler(调度器),用来维护引擎发送过来的 request 请求队列。
Downloader(下载器),接收引擎发送过来的 request 请求,并生成请求的响应对象,将响应结果返回给引擎。
Spider(爬虫程序) ,处理引擎发送过来的 response, 主要用来解析、提取数据和获取需要跟进的二级URL,然后将这些数据交回给引擎。
Pipeline(项目管道),用实现数据存储,对引擎发送过来的数据进一步处理,比如存 MySQL 数据库等。
在整个执行过程中,还涉及到两个 middlewares 中间件,分别是下载器中间件(Downloader Middlewares)和蜘蛛中间件(Spider Middlewares),它们分别承担着不同的作用:下载器中间件,位于引擎和下载器之间,主要用来包装 request 请求头,比如 UersAgent、Cookies 和代理 IP 等;蜘蛛中间件,位于引擎与爬虫文件之间,它主要用来修改响应对象的属性。
Scrapy 工作流程示意图如下所示:二皮脸data_2022年网络我的网络爬虫学习心得_第3张图片
图1:工作流程示意图
上述示意图描述如下,当一个爬虫项目启动后,Scrapy 框架会进行以下工作:
第一步:由“引擎”向爬虫文件索要第一个待爬取的 URL,并将其交给调度器加入 URL 队列当中(对应图中1/2步骤)。
第二步:调度器处理完请求后, 将第一个 URL 出队列返回给引擎;引擎经由下载器中间件将该 URL 交给下载器去下载 response 对象(对应3、4步骤)。
第三步:下载器得到响应对象后,将响应结果交给引擎,引擎收到后,经由蜘蛛中间件将响应结果交给爬虫文件(对应5/6步骤)。
第四步:爬虫文件对响应结果进行处理、分析,并提取出所需要的数据。
第五步:最后,提取的数据会交给管道文件去存数据库,同时将需要继续跟进的二级页面 URL 交给调度器去入队列(对应7、8、9步骤)。
上述过程会一直循环,直到没有要爬取的 URL 为止,也就是 URL 队列为空时才会停止。
代码:

代码:# -*- coding: utf-8 -*-
import scrapy
from NewsData.items import NewsdataItem
from bs4 import BeautifulSoup
from gerapy_auto_extractor.extractors import *
from urllib import parse

class NewsSpider(scrapy.Spider):
    name = 'news'
    allowed_domains = []
    start_urls = [
        ('http://www.huiyewang.com/xiaoxue/', '作文网', '小学作文'),
        ('http://www.huiyewang.com/chuzhong/', '作文网', '初中作文'),
        ('http://www.huiyewang.com/gaozhong/', '作文网', '高中作文'),
        ('http://www.huiyewang.com/danyuan/', '作文网', '单元作文'),
        ('http://www.huiyewang.com/yingyu/', '作文网', '英语作文'),
        ('http://www.huiyewang.com/yilunwen/', '作文网', '议论文'),
        ('http://www.huiyewang.com/youxiuzuowen/', '作文网', '优秀作文'),
        ('http://www.huiyewang.com/sucai/', '作文网', '作文素材'),
        ('http://www.huiyewang.com/zhidao/', '作文网', '作文指导'),
        ('http://www.huiyewang.com/duhougan/', '作文网', '读后感'),
        ('http://www.huiyewang.com/yulu/', '作文网', '语录大全'),
    ]
    def start_requests(self):
        for url in self.start_urls:
            item = NewsdataItem()
            item["site"] = url[1]
            item["item"] = url[2]
            item["student_id"] = "20201941"
            item["student_name"] = "刘昱泽"
        yield scrapy.Request(url=url[0], meta={"item": item}, callback=self.parse)

def parse(self, response):
    item = response.meta["item"]
    student_id_ = item["student_id"]
    student_name_ = item["student_name"]
    site_ = item["site"]
    item_ = item["item"]
    title_list = response.xpath('//h2/a/text()').extract()
    url_list = response.xpath('//h2/a/@href').extract()
    for each in range(len(title_list)):
        item = NewsdataItem()
        item["title"] = title_list[each]
        item["url"] = "http://www.huiyewang.com/" + str(url_list[each])
        item["site"] = site_
        item["item"] = item_
        item["student_id"] = student_id_
        item["student_name"] = student_name_

        yield scrapy.Request(url=item["url"], meta={"item": item}, callback=self.parse_detail)

def parse_detail(self, response):
    # data = extract_detail(response.text)
    item = response.meta["item"]
    item["date"] = ""
    strs = response.xpath('//article[@class="article-content"]').extract_first()
    item["content"] = BeautifulSoup(strs, 'lxml').text
    item["student_id"] = "20201941"
    item["student_name"] = "刘昱泽"
    return item

结果:
二皮脸data_2022年网络我的网络爬虫学习心得_第4张图片
二皮脸data_2022年网络我的网络爬虫学习心得_第5张图片

5.Gerapy的搭建流程

创建conda虚拟环境,起名为Gerapy,在虚拟环境下进行gerapy操作。
二皮脸data_2022年网络我的网络爬虫学习心得_第6张图片
激活虚拟环境
二皮脸data_2022年网络我的网络爬虫学习心得_第7张图片
安装gerapy
在这里插入图片描述
安装scrapyd、pywin32、gerapy_auto_extractor
在这里插入图片描述
找到虚拟环境的路径,cd转移到环境中
在该文件夹下创建一个新的文件夹gerapy,并且cd进入
在这里插入图片描述
格式化该文件,会生成新的文件夹
在这里插入图片描述
进入新的文件夹(切记再来一次cd gerapy 因为这里产生了一个新的文件夹)
在这里插入图片描述
数据迁移,生成表单
在这里插入图片描述
二皮脸data_2022年网络我的网络爬虫学习心得_第8张图片
创建超级用户,
会自动生成密码,password:admin
在这里插入图片描述
启动服务
二皮脸data_2022年网络我的网络爬虫学习心得_第9张图片
可能会弹出防火墙提示,点击确定。
之后不要关闭该cmd
启动一个新的cmd
启动新的虚拟环境
二皮脸data_2022年网络我的网络爬虫学习心得_第10张图片
进入虚拟环境文件下的Scripts文件,启动scrapy脚本
二皮脸data_2022年网络我的网络爬虫学习心得_第11张图片
二皮脸data_2022年网络我的网络爬虫学习心得_第12张图片
不要关闭两个cmd窗口,打开浏览器输入127.0.0.1:8000
二皮脸data_2022年网络我的网络爬虫学习心得_第13张图片
输入密码和用户名:为刚才创建的超级用户的名和密码;
二皮脸data_2022年网络我的网络爬虫学习心得_第14张图片
创建,主机管理
二皮脸data_2022年网络我的网络爬虫学习心得_第15张图片
二皮脸data_2022年网络我的网络爬虫学习心得_第16张图片
二皮脸data_2022年网络我的网络爬虫学习心得_第17张图片
Localhost、127.0.0.1、6800
二皮脸data_2022年网络我的网络爬虫学习心得_第18张图片
状态是正常的
将自己写的scrapy项目复制进这个文件夹下
在这里插入图片描述
打开项目管理,刷新,打包,部署。
结果:
二皮脸data_2022年网络我的网络爬虫学习心得_第19张图片

你可能感兴趣的:(python,学习,开发语言)