基于Python的网络爬虫总结

心得体会

本人在大二时自学过一些爬虫知识,对爬虫已经有了一定程度的了解,到了大三的时候专业开了相应的网络爬虫课,学到了更多的相关知识和技术,并对爬虫有了更加深入的认识,在学习爬虫的过程中有一些自己的心得体会。
(1)多实践。在上课的时候要跟着老师演示的步骤自己实践,看会了不等于自己会操作,一定要自己多动手去实际操作。
(2)构建整体的知识框架。在学习的时候首先要了解python的每个模块具体可以实现什么功能,而不是去死记硬背地去记代码,在遇到具体业务逻辑的时候要知道用什么模块,之后可以去查该模块具体的用法,甚至复制粘贴自己写过的代码或者别人的代码,避免自己造“轮子”的过程。
(3)了解整体业务流程和逻辑。在写代码时首先要了解整体的业务流程框架,之后对每个流程 进行细化、编写对应的代码、实现对应的功能。
(4)学会解决问题。在代码报错的时候根据报错信息和实际的业务逻辑找到错误所在,也可以把报错信息复制粘贴到百度去查找解决方案。不要害怕出错,在不断试错的过程中不断积累经验,解决错误后会对问题有更深刻的理解,遇见错误到解决错误的过程就是学习和进步的过程。
(5)写博客。通过写博客的方式记录自己的学习过程,把自己学习过程中遇到的问题和如何解决问题的过程记录下来,在写博客的过程中就是复习知识和加深印象的过程,在写的过程中把自己含糊不清的知识理清,会对知识有一个更透彻的认识和理解,并且方便日后复习。

爬虫相关的基本Python模块

requests

requests库是一个简洁的能够简单地处理HTTP请求的第三方库,其中,get()是获取网页最常用的方法,在调用requests.get()函数后,返回网页内容会保存成为一个Response对象,其中get()函数的参数url链接必须采用HTTP或者HTTPS的方式访问。

bs4

bs4 全名 BeautifulSoup,是编写 python 爬虫常用库之一,主要用来解析 html 标签。常用的方法为BeautifulSoup(“A Html Text”, “html.parser”),其中的两个参数:第一个参数是要解析的html文本,第二个参数是使用那种解析器,对于HTML来讲就是html.parser,这个是bs4自带的解析器。

pandas

该模块是用于数据分析任务的。其中纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。在爬虫应用中,该模块可将爬取到的数据转换为DataFrame,用于后续往数据库里插入数据

selenium

Selenium是一个Web的自动化测试工具,可以按指定的命令自动操作。Selenium也可以根据的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生等。

sqlalchemy

是Python SQL工具包和对象关系映射器,是Python中最著名的ORM(Object Realationship Mappin)框架,它简化SQL上的操作,使开发人员将主要精力都放在程序逻辑上,从而提高开发效率。其中sqlalchemy.create_engine(*args,**kwargs):创建数据库实例,常用参数:
Engine:用URL的方式填写连接数据库所需的数据:格式:db=create_engine(‘mysql+pymysql://数据库用户:数据库密码@127.0.0.1:3306/数据库名?charset=utf8’)
case_sensitive=True:如果为False,在查询获取列名时将不区分大小写
connect_args :值是一个字典,用于设置数据库连接参数,连接数据库时可以传递自定义参数。

pymongo

是Python中用来操作MongoDB的一个库,可以建立连接,指定数据库、集合,常用函数为client = pymongo.MongoClient(‘127.0.0.1’,27017)。

pymsql

pymysql是从Python连接到MySQL数据库服务器的接口。 它实现了Python数据库APIv2.0,并包含一个纯Python的MySQL客户端库,连接数据库时常使用 pymsql.connect() 函数。

json

将抓取到的数据转换为json格式(往MongeDB中插入数据时要字典格式),插入MongoDB数据库

dateparser

是一个智能且高性能的日期解析器库,在抓取日期数据时可以用来解析日期。

scrapy

Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。Scrapy包含几个基本模块,如下所述。
调度器(Scheduler):可理解为一个URL(抓取网页的网址或者说是链接)的优先队列,由它来决定下一个要抓取的网址是什么,同时去除重复的网址(不做无用功)。用户可以自己的需求定制调度器。
下载器(Downloader):是所有组件中负担最大的,它用于高速地下载网络上的资源。Scrapy 的下载器代码不会太复杂,但效率高,主要的原因是 Scrapy 下载器是建立在 twisted 这个高效的异步模型上的(其实整个框架都在建立在这个模型上的)。
爬虫(Spider):是用户最关心的部份。用户定制自己的爬虫,用于从特定的网页中提取自己需要的信息,即所谓的实体(Item)。例如使用 Xpath 提取感兴趣的信息。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面。
实体管道(Pipeline):用于接收网络爬虫传过来的数据,以便做进一步处理。例如验证实体的有效性、清除不需要的信息、存入数据库(持久化实体)、存入文本文件等。
Scrapy 引擎(Scrapy Engine):是整个框架的核心,用来处理整个系统的数据流,触发各种事件。它用来控制调试器、下载器、爬虫。实际上,引擎相当于计算机的CPU,它控制着整个流程。
中间件(Middleware):整个 Scrapy 框架有很多中间件,如下载器中间件、网络爬虫中间件等,这些中间件相当于过滤器,夹在不同部分之间截获数据流,并进行特殊的加工处理。

urllib

用于操作网页 URL,并对网页的内容进行抓取处理。常用模块有urllib.request - 打开和读取 URL;urllib.parse - 解析 URL

Xpath

Xpath 是一种用在 XML 文档中定位元素的语言,同样也支持 HTML 元素的解析,提供用户在数据结构树中寻找节点的功能(相比于正则表达式更简单方便)。

PyMuPDF

PyMuPDF是一个用来操作PDF文档的Python包,功能比较强大,不依赖其他的Python包,除了提供方便易用的功能外,还提供了一些底层的操作方法。使用PyMuPDF,可以访问扩展名为“.pdf”、“.xps”、“.oxps”、“.cbz”、“.fb2”或“.epub”。此外,大约10种流行的图像格式也可以像文档一样处理:“.png”,“.jpg”,“.bmp”,“.tiff”等。

gerapy

用于爬虫框架项目部署,将通过Scrapy爬虫框架写好的项目整合到Django的Web环境进行统一管理的后台。简单整理为一个Admin后台进行控制写好的爬虫脚本,进行有针对性的网络数据采集(比如固定时间、固定间隔、或者一次性采集),并对项目进行简单的项目管理。

scrapyd

Scrapyd是一个用来部署和运行Scrapy项目的应用,可以用来管理多个项目。在安装并开启Scrapyd之后,它将会挂起一个服务来监听运行爬虫的请求,并且根据请求为每一个爬虫启用一个进程来运行。Scrapyd同样支持同时运行多个进程

简单爬虫脚本的编写

实验内容:用anaconda的Jupyter Notebook抓取指定网页的内容,并将数据存入MongoDB数据库

在anaconda的Jupyter Notebook中新建一个Python文件,添加如下爬虫代码。

 #导入相关的库
import requests
from bs4 import BeautifulSoup
import pandas as pd
#访问页面信息
url="http://health.people.com.cn/GB/408568/index.html"#目标网址
html=requests.get(url) 	#请求访问网址
html.encoding="GB2312" 	#编码方式
soup = BeautifulSoup(html.text,'lxml')	#解析得到的网页信息
#获取文章信息
list=[]
for i in soup.find_all("div",class_="newsItems"):
    title=i.a.text 	#文章标题
    date=i.div.text	#文章日期
    urll = i.a["href"] #相对路径
    list.append((title,date,url+urll)) #添加到文章信息列表
#获取文本链接列表
text_url_list=[]
for u in list:
    text_url_list.append(url+u[2]) #将根路径与相对路径拼接后加入文本链接列表
#获取文本列表
text_list=[]
for u in text_url_list:
    html2=requests.get(u)   
    html2.encoding="GB2312"
    soup2 = BeautifulSoup(html2.text,'lxml')
    text=soup2.find("div",class_="artDet").text
    text_list.append((text))
#将数据转换成DataFrame
df = pd.DataFrame(list,columns=["title","date","url"])
df2 = pd.DataFrame(text_list,columns=["text"])
#将数据写入MongoDB数据库
import pymongo #导入操作MongoDB数据库的库
import json
client = pymongo.MongoClient('127.0.0.1',27017) #连接MongoDB数据库(要先开启MongoDB服务)
database = client["NewsData"] #设置数据库名称
table = database["News"] #设置数据库表单
data_ = json.loads(df.T.to_json()) #将抓取的数据转为json格式(往MongoDB中插入数据时需要字典格式)
table.insert_many(data_.values()) #往数据库表单中插入数据

在数据库可视化工具(Navicat)中查看抓取并存入MongoDB数据库中的数据
基于Python的网络爬虫总结_第1张图片

Scrapy爬虫框架的使用

实验内容:用Scrapy爬虫框架抓取指定网页的内容,并将数据存入MongoDB数据库。

创建Scrapy项目

(1)安装scrapy
在命令窗口输入pip install scrapy
(2)新建一个scrapy框架文件夹
(3)创建scrapy项目
进入创建的scrapy框架文件夹,打开命令窗口,输入 scrapy startproject NewsData ,之后在scrapy框架文件夹中会出现NewsData项目文件夹。
基于Python的网络爬虫总结_第2张图片(4)查看scrapy框架文件的目录结构
在命令行输入 tree /f
基于Python的网络爬虫总结_第3张图片(5)创建爬虫文件
在NewsData项目文件的命令窗口中输入 scrapy genspider news " ",在spiders中会生成news爬虫文件。

基于Python的网络爬虫总结_第4张图片下面介绍利用Pycharm对NewsData中的各文件进行修改。

items.py

import scrapy
class NewsdataItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    url = scrapy.Field()  # 网站连接
    site = scrapy.Field() # 网站名称
    category = scrapy.Field() # 类别
    text_url = scrapy.Field() #文章连接
    title = scrapy.Field()  # 文章标题
    content = scrapy.Field()  # 文章正文
    stu_id=scrapy.Field() # 学号
    pass

在该文件中定义一个NewsdataItem类,在该类中设置需要抓取的字段。

middlewares.py

from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware
from scrapy.utils.project import get_project_settings
import random
settings = get_project_settings()
class RotateUserAgentMiddleware(UserAgentMiddleware):
    def process_request(self, request, spider):
        referer = request.url
        if referer:
            request.headers["referer"] = referer
        USER_AGENT_LIST = settings.get('USER_AGENT_LIST')
        user_agent = random.choice(USER_AGENT_LIST)
        if user_agent:
            request.headers.setdefault('user-Agent', user_agent)
            print(f"user-Agent:{user_agent}")

该文件为scrapy框架的中间件,可以实现自定义requests请求、下载扩展和进行response过滤等功能。process_request为默认方法,每当request通过下载中间件时该方法被调用,把返回的对象通过引擎交给调度器处理。在该文件中添加以上代码,用来添加Header和IP类,其中USER_AGENT_LIST在settings.py中设置,user_agent为USER_AGENT_LIST中随机的一个。

pipelines.py

import pymongo
from scrapy.utils.project import get_project_settings
settings = get_project_settings()

class NewsdataPipeline:
    # class中全部替换
    def __init__(self):
        host = settings["MONGODB_HOST"]
        port = settings["MONGODB_PORT"]
        dbname = settings["MONGODB_DATABASE"]
        sheetname = settings["MONGODB_TABLE"]
        username = settings["MONGODB_USER"]
        password = settings["MONGODB_PASSWORD"]
        # 创建MONGODB数据库链接
        client = pymongo.MongoClient(host=host, port=port)
        # 指定数据库
        mydb = client[dbname]
        # 存放数据的数据库表名
        self.post = mydb[sheetname]

    def process_item(self, item, spider):
        data = dict(item)
        # 数据写入
        self.post.insert_one(data)
        return item

该文件为实体管道,用于接收引擎传过来的数据,以便做进一步处理。例如验证实体的有效性、清除不需要的信息、存入数据库(持久化实体)、存入文本文件等。在该文件中添加以上代码,用来添加必备的包和加载设置。在NewsdataPipeline类中设置MongDB数据库的主机名、端口号、数据库名称、表单名,并将网络爬虫传过来的数据写入MongoDB数据库。

settings.py

BOT_NAME = 'NewsData' #设置scrapy项目名
SPIDER_MODULES = ['NewsData.spiders'] #设置Scrapy搜索spider的模块列表
NEWSPIDER_MODULE = 'NewsData.spiders' #设置spider的模块

#ROBOTSTXT_OBEY设置为False(不遵守机器人协议)
ROBOTSTXT_OBEY = False

#设置下载中间件
DOWNLOADER_MIDDLEWARES = {
   'NewsData.middlewares.RotateUserAgentMiddleware': 543,
}

#开启管道
ITEM_PIPELINES = {
   'NewsData.pipelines.NewsdataPipeline': 300,
}

#设置用户代理列表
USER_AGENT_LIST = [
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
    "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
    "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
    "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",
    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
    "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
    "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
    "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
    "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
    "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
    "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
]


# 添加MONGODB数仓设置
MONGODB_HOST = "localhost"  # 数仓IP
MONGODB_PORT = 27017  # 数仓端口号
MONGODB_DATABASE = "NewsData"  # 数仓数据库
MONGODB_TABLE = "News_Process_B"  # 数仓数据表单

该文件是项目的配置文件

编写完以上几个文件后开始编写爬虫代码实现目标网址内容的抓取:

目标网站列表:

基于Python的网络爬虫总结_第5张图片

news.py


import scrapy
from bs4 import BeautifulSoup

from NewsData.items import NewsdataItem

class NewsSpider(scrapy.Spider):
    name = 'news'
    allowed_domains = []
    start_urls = [
        ['https://www.yzs.com/zhongshitoutiao/',"中诗网","中诗头条","20201902"],
        ['https://www.yzs.com/zhgshg/', "中诗网", "中国诗歌","20201902"],
        ['https://www.yzs.com/zhongshizhuanti/', "中诗网", "中诗专题","20201902"],
        ['https://www.yzs.com/wenrenshuhua/', "中诗网", "文人书画","20201902"],
        ['https://www.yzs.com/zhongshitekan/', "中诗网", "中诗特刊","20201902"],
        ['https://www.yzs.com/shigewanlixing/', "中诗网", "诗行天下","20201902"],
        ['https://www.yzs.com/zhgshg/index_2.html', "中诗网", "中诗图书","20201902"],
        ['https://www.yzs.com/zhgshg/index_3.html', "中诗网", "中诗论坛","20201902"],
        ['https://www.yzs.com/zhgshg/index_4.html', "中诗网", "中诗网络","20201902"],
        ['https://www.yzs.com/zhgshg/index_5.html', "中诗网", "中诗高地","20201902"],
        ['https://www.yzs.com/zhgshg/index_6.html', "中诗网", "诗情画意","20201902"],
        ['https://www.yzs.com/zhgshg/index_7.html', "中诗网", "如诗如画","20201902"],
        ['https://www.yzs.com/zhgshg/index_8.html', "中诗网", "红叶题诗","20201902"],
        ['https://www.yzs.com/zhgshg/index_9.html', "中诗网", "诗有别才","20201902"],
        ['https://www.yzs.com/zhgshg/index_10.html', "中诗网", "诗礼传家","20201902"],
        ['https://www.yzs.com/zhgshg/index_11.html', "中诗网", "诗以言志","20201902"],
        ['https://www.yzs.com/zhgshg/index_12.html', "中诗网", "诗家三昧","20201902"],
                  ]
    def start_requests(self):
    for url in self.start_urls:
        item = NewsdataItem()
        item["site"]=url[1]
        item["category"]=url[2]
        item["stu_id"]=url[3]
        yield scrapy.Request(url=url[0],meta={"item":item},callback=self.parse)
        

该文件为在spiders目录下创建的爬虫脚本文件,其中:
start_requests:用于启动爬虫。该方法返回一个可迭代对象, scrapy.Request中url为请求的url,meta为用户自定义向回调函数传递的参数,可以实现数据在不同的解析函数中的传递(把当前页面抓取到的数据传递给下一个parse函数进行进一步处理),callback为回调函数,用于接受请求后的返回信息,yield把请求交给引擎。

	def parse(self, response):
	    item = response.meta["item"]
	    site_ = item["site"]
	    category_ = item["category"]
	    stu_id_=item["stu_id"]
	    title_list = response.xpath('//*[@class="blogs-list"]/ul/li/h2/a/text()').extract()
	    print(title_list)
	    text_url_list_tmp = response.xpath('//*[@class="blogs-list"]/ul/li/h2/a/@href').extract()
	    text_url_list=[]
	    for text_url_tmp in text_url_list_tmp:
	        text_url_list.append("https://www.yzs.com"+text_url_tmp)
	    for each in range(len(title_list)):
	        item = NewsdataItem()
	        item["site"] = site_
	        item["category"] = category_
	        item["stu_id"] = stu_id_
	        item["title"] = title_list[each]
	        item["text_url"] = text_url_list[each]
	        yield scrapy.Request(url=item["text_url"], meta={"item":item},callback=self.parse_detail)

parse:用于列表解析。每抓取一个url对应的网页信息就会调用该方法,解析并处理返回的response,返回item或requests,Item传给item pipeline持久化,requests交给Scrapy下载并由指定的回调函数处理(parse_detail),一直循环直到处理完所有数据。

	def parse_detail(self,response):
	    item = response.meta["item"]
	    strs= response.xpath('//div[@class="newstext"]').extract_first()
	    item["content"]=BeautifulSoup(strs,'lxml').text
	    return item #把控制权给管道

detail_parse:用于内容解析。打开新的连接页面进行深度挖掘。由于content需要打开新的网页,所以在parse方法中没有对item[“content”]处理,而是在parse中的Request中指定在parse_detail中进行处理(打开新页面并解析抓取该新页面信息),最后return item把控制权给管道。

数据存储

通过pipelines.py中的代码,在pipelines.py文件中处理detail_parse通过引擎传来的数据,把数据存入配置好的MongoDB数据库。

运行scrapy框架

在NewsData文件的命令窗口中输入 scrapy crawl news

通过数据库可视化工具(Navicat)查看抓取并存入MongoDB数据库中的数据:
基于Python的网络爬虫总结_第6张图片

基于Gerapy的爬虫框架项目部署

部署一个爬虫框架

(1)安装gerapy
在命令行输入 pip install gerapy
(2)检验gerapy是否安装成功
在命令行输入 gerapy
基于Python的网络爬虫总结_第7张图片
上图所示为安装成功
(3)初始化一个gerapy项目
新建一个文件夹,在该文件夹中打开命令行,输入gerapy init 之后在该文件夹出现一个gerapy文件。
在这里插入图片描述

(4)数据迁移
进入该gerapy目录,打开命令行输入gerapy migrate 对数据库数据进行迁移。

基于Python的网络爬虫总结_第8张图片
基于Python的网络爬虫总结_第9张图片

数据迁移成功后在gerapy目录中出现dbs文件。
(5)创建超级用户
在命令行输入 gerapy initadmin
在这里插入图片描述

记住账户和初始密码
(6)启动服务
在命令行输入gerapy runserver 0.0.0.0:8000
基于Python的网络爬虫总结_第10张图片

服务端口号为8000,挂起该窗口不要关(否则服务停止)。
(7)创建主机
在浏览器中访问http://127.0.0.1.8000
基于Python的网络爬虫总结_第11张图片

出现上图界面,用户名和密码为(5)中的账户和初始密码。
输入用户名和密码后点击登录进入下图界面。
基于Python的网络爬虫总结_第12张图片

启动scrapyd服务(若未安装需在命令行输入pip install scrapyd进行安装),进入anoconda的Scripts目录中。

打开命令行输入 scrapyd
在这里插入图片描述
基于Python的网络爬虫总结_第13张图片

服务端口号为6800,挂起该窗口不要关(否则服务停止)
进入主机管理页面后点击创建。
基于Python的网络爬虫总结_第14张图片

点击创建后出现下图界面,输入主机名称、IP,scrapyd的端口号,之后点击创建。

基于Python的网络爬虫总结_第15张图片

出现下图页面则创建成功。
在这里插入图片描述

(8)创建项目
将写好的爬虫文件放入projects文件中。
基于Python的网络爬虫总结_第16张图片
进入项目管理,项目创建成功后如下图,之后点击部署。
在这里插入图片描述 点击部署后进入如下页面,添加描述后,点击打包,部署。
基于Python的网络爬虫总结_第17张图片部署成功后如下图。
在这里插入图片描述
(9)创建任务
进入任务管理,点击创建。
基于Python的网络爬虫总结_第18张图片
点击创建后出现下图页面,名称为任务名称,项目为prejects文件下项目名称,爬虫为项目文件中爬虫文件名称,主机为创建的主机名称,调度方式根据需求设置,之后点击创建。
基于Python的网络爬虫总结_第19张图片
任务创建成功后出现下图页面,可点击状态查看任务执行情况。
在这里插入图片描述
下图为任务状态,任务运行成功。
基于Python的网络爬虫总结_第20张图片
在数据库可视化工具(Navicat)中查看抓取并存入MongoDB数据库中的数据。

基于Python的网络爬虫总结_第21张图片

部署多个爬虫框架

按照上述流程添加多个项目和任务。
基于Python的网络爬虫总结_第22张图片
基于Python的网络爬虫总结_第23张图片在主机管理的调度中查看任务运行情况。
在这里插入图片描述基于Python的网络爬虫总结_第24张图片在数据库可视化工具(Navicat)中出现抓取并存入MongoDB数据库中的数据表单。
基于Python的网络爬虫总结_第25张图片

你可能感兴趣的:(python,爬虫,scrapy)