PySpider 架构
PySpider 的架构主要分为Scheduler(调度器)、Fetcher(抓取器)和Processor(处理器)三部分,整个爬虫收到Monitor(监控器)的监控,抓取的结果被Result Worker(结果处理器)处理。
步骤1:
打开cmd 或者 pycharm 终端 或者 mac 终端 ,输入"pyspider all “或"pyspider” 命令 然后打开浏览器,在地址栏中输入网址:127.0.0.1:5000
即可进入PySpider的后台,需要注意的是,终端不要关闭
步骤2 :
单击【 create】 按钮,再打开的对话框中输入任意名称(有意义即可)。我这里输入的是wan_gou_spider 因为我将爬取这个网站
步骤三 :
就会进入脚本编辑页面
到这里就可以开始编写你的脚本了
这里提供一个案例 爬取玩够网的机场信息
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2020-06-25 09:35:21
# Project: wan_gou_spider
from pyspider.libs.base_handler import *
import re
class Handler(BaseHandler):
crawl_config = {
}
def __init__(self):
self.urls=[
"www.wego.cn/airports/airport-name/a",
"www.wego.cn/airports/airport-name/b",
"www.wego.cn/airports/airport-name/c",
"www.wego.cn/airports/airport-name/d",
"www.wego.cn/airports/airport-name/e",
]
@every(minutes=24 * 60)
def on_start(self):
for url in self.urls:
self.crawl(url, callback=self.index_page,validate_cert=False)
@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
url_list = re.findall('<li\sclass="extra-item\sis-hidden">\s+<a\shref="([\s\S+]*?)">\s+\S+',response.text)
for item in url_list:
url="http://www.wego.cn"+item
self.crawl(url, callback=self.detail_page,validate_cert=False)
@config(priority=2)
def detail_page(self, response):
print('------------进入匹配------------')
AirportName = re.findall('<tr>\s+<td\swidth="200">全名</td>''\s+<td>([\s\S+]*?)</td>\s+</tr>',response.text)
IATA = re.findall('<tr>\s+<td\swidth="200">IATA\s代码</td>''\s+<td>([\s\S+]*?)</td>\s+</tr>',response.text)
Latitude = re.findall('<tr>\s+<td\swidth="200">纬度</td>''\s+<td>([\s\S+]*?)</td>\s+</tr>',response.text)
Longitude = re.findall('<tr>\s+<td width="200">经度</td>\s+''<td>([\s\S+]*?)</td>\s+</tr>',response.text)
return {
"url": response.url,
"AirportName":AirportName[0]if AirportName else "无",
"IATA":IATA[0]if IATA else "无",
"Latitude":Latitude[0]if Latitude else "无",
"Longitude":Longitude[0]if Longitude else "无"
}
代码完成后:
可以单击右上角的【Save】按钮 ,然后返回到dashboard,把爬虫的状态改成Running 或debug,然后单击右侧【run】按钮,爬虫即可成功启动。
查看爬取结果,在dashboard 页面单击【Results】按钮,进入爬取结果列表。