精华内容
下载资源
问答
  • 简介这篇文章主要介绍了通过python自动化获取服务器信息,并写入到excel(示例代码)以及相关的经验技巧,文章约943字,浏览量170,点赞数4,值得参考!博主目前在电信外包工作,比较坑,因为涉及到统计服务器信息的...

    简介这篇文章主要介绍了通过python自动化获取服务器信息,并写入到excel(示例代码)以及相关的经验技巧,文章约943字,浏览量170,点赞数4,值得参考!

    博主目前在电信外包工作,比较坑,因为涉及到统计服务器信息的工作,而且统计服务器的个数大概有几百台,统计之后还要将信息全部写入到excel里去,如果是手工一个个去做,起码做一个月吧,前提无法使用ansible等工作,只能通过CRT的方式,一个个手工登上去,然后看服务器上所有进程的信息,包括进程名称,进程端口号,启停方式,工作路径。一台服务器上可能有上万个程序,你一个个手工搞,并将信息录入到excel,一个服务器就能把你搞崩溃。

    那面对这个问题,我思考了需要分两步走,其一,需要获取服务器的信息文件,方式是通过python脚本的方式去获取。然后再通过crt的send command all sessions方式将脚本批量上传至服务器,并设置下载默认本地路径,文件信息会处理成json,方便后续写入excel。其二,遍历之前获取json文件的目录,并通过脚本,将json文件的信息批量写入到excel。

    第一阶段的脚本:https://github.com/herrywen-nanj/get_information/blob/master/Get_programmer-info.py

    第二阶段的脚本:https://github.com/herrywen-nanj/get_information/blob/master/ChangeJsonToExcel

    由于是运营商,比较敏感,第二阶段的脚本只能是个demo,具体脚本就不贴出,获取信息格式都是[{},{}],也就是json格式。

    处理完之后,excel的内容大概长这样

    ![](https://s1.51cto.com/images/blog/201912/01/8a5187016f2a9a9174b7ccc42ae4138f.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

    展开全文
  • 处理方案 抛异常, 退出浏览器, #!/usr/bin/python3 # -*- coding: utf-8 -*- from tool.find import is... 不然linux上会出现很多谷歌进程, 导致服务器崩溃 driver.quit() writeLog('test1', '执行失败: %s' % message)

    处理方案

    抛异常, 退出浏览器,

    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    
    from tool.find import is_element_present, die, writeLog, sleep
    from tool.webdriver import serDriver
    
    driver = serDriver()
    driver.implicitly_wait(10)
    try:
        writeLog('test1', '01test1测试开始')
        sleep(1)
    
        url = "https://www.baidu.com/"
        driver.get(url)
        writeLog('test1', '02test1打开百度')
        sleep(1)
    
        # 百度输入框输入科学
        ele = is_element_present(driver, 'ID', 'kw', 'test1', '百度输入框没找到')
        die(ele)
        ele.send_keys('张筱雨')
        writeLog('test1', '03test1百度输入框输入科学')
        sleep(1)
    
        # 点击百度一下
        ele = is_element_present(driver, 'ID', 'su', 'test1', '点击百度一下没找到')
        die(ele)
        ele.click()
        writeLog('test1', '04test1点击百度一下')
        sleep(1)
    
        # 点击科学-百度汉语
        ele = is_element_present(driver, 'XPATH', '//*[@id="1"]/h3/a', 'test1', '点击科学-百度汉语没找到')
        die(ele)
        ele.click()
        writeLog('test1', '05test1点击科学-百度汉语')
        sleep(1)
    
        # 获取所有已开开页面句柄, 句柄可理解为id
        windows = driver.window_handles
        driver.close()  # 关闭当前页面
        sleep(1)
    
        # 切换到新页面
        driver.switch_to.window(windows[1])
        sleep(1)
    
        # 获取科学两个字  //*[@id="pinyin"]/h2/strong
        ele = is_element_present(driver, 'XPATH', '/html/body/div[4]/div[2]/div/div[2]/dl[1]/dd/h1', 'test1', '获取科学两个字没找到')
        die(ele)
    
        writeLog('test1', '06test1获取到的字: %s,获取到的代码页面: %s' % (ele.text, ele.get_attribute('outerHTML')))
        sleep(1)
        driver.quit()
        writeLog('test1', '07test1流程完美结束')
    except Exception as message:
        # 这一步退出谷歌浏览器很关键, 不然linux上会出现很多谷歌进程, 导致服务器崩溃
        driver.quit()
        writeLog('test1', '执行失败: %s' % message)
    
    
    展开全文
  • python爬虫

    万次阅读 2018-02-07 00:59:16
    #python网络爬虫 #通用网络爬虫(没有目的,爬去所有的URL) 聚焦网络爬虫(过滤无关的链接)#python数据分析与挖掘实战的正则表达式 #正则表达式 世界上信息非常多,而我们关注的信息有限。假如我们希望只提取出...

    一、正则表达式

    #python网络爬虫
    #通用网络爬虫(没有目的,爬去所有的URL)  聚焦网络爬虫(过滤无关的链接)
    
    #python数据分析与挖掘实战的正则表达式
    #正则表达式  世界上信息非常多,而我们关注的信息有限。假如我们希望只提取出关注数据,此时可以通过一些表达式进行提取,正则表达式就是其中一种进行数据筛选的表达式。
    
    #原子
    #原子是正则表达式中最基本的组成单位,每个正则表达式中至少要包含一个原子。
    #常见的原子类型有:普通字符作为原子,非打印字符作为原子,通用字符作为原子,原子表
    
    import re
    pat="yue"         #普通字符作为原子
    string="http://yum.iqianyue.com"
    rst=re.search(pat,string)
    print(rst)
    
    pat1="\n"  #\n  \t            #非打印字符作为原子
    string1='''dsfjsdjf
    sdfsdfsdfsdf'''
    rst1=re.search(pat1,string1)
    print(rst1)
    
    pat2="\w\dpython\w"
    #\w 通用字符,匹配任意字母,数字,下划线
    #\d 匹配任意一个十进制数       #\S 除了十进制数的任意
    #|s 匹配空白字符       #\S 除了空白字符的任意字符
    #\W 匹配任意一个除了字母,数字,下划线的东西
    string2="hsdlfsga7pythonkdfshdskjf"
    rst2=re.search(pat2,string2)
    print(rst2)
    
    pat3="pyth[jsz]n"           #原子表  定义一组平等的字符
    string3="fsdjfpythjnjslkdfpythsnjfsjpythjsnfsd"
    rst3=re.search(pat3,string3)
    print(rst3)
    
    #元字符
    #正则表达式中具有一些特殊含义的字符,比如重复N次前面的字符等
    #. 匹配任意字符
    #^ 匹配字符串中的开始位置
    #$ 匹配字符串中结束的位置
    #* 匹配0次 1次或者多次的前面的原子
    #?匹配0次或者1次前面的原子
    #+ 匹配一次或多次前面的原子
    #{3} 前面的原子恰好出现了3次  并且连在一起的
    #{n} 出现了n次
    #{4,7} 至少出现4次  之多出现7次  {4,}
    #t|s  出现t或者s
    #() 提取某一个内容
    pat4=".python..."
    string4="sjslkdjfpythonslfjshf"
    rst4=re.search(pat4,string4)
    print(rst4)
    
    pat5="python|php"
    string5="jfsdjphpjsljfspythonfsd"
    rst5=re.search(pat5,string5)
    print(rst5)
    
    #模式修正符
    #可以在不改变正则表达式的情况下,通过模式修正符改变正则表达式的含义,从而实现一些匹配结果的调整等功能
    #I 使正则表达式不区分大小写
    #M 多行匹配
    #L 本地化识别匹配
    #U 根据Unicode解析字符
    #S 让点也能匹配包括换行符
    pat6="python"
    pat7="python"
    string6="sjljfaljafPythonsfjlsjfssfs"
    rst6=re.search(pat6,string6)
    print(rst6)
    
    rst7=re.search(pat7,string6,re.I)    #模式修正符实例,不区分大小写
    print(rst7)
    
    #贪婪模式和懒惰模式
    #贪婪模式尽可能的多的去匹配   #懒惰模式尽可能少的去匹配
    pat8="p.*y"   #贪婪模式 更多的去覆盖
    pat9="p.*?y"  #懒惰模式 更精准的定位
    string8="jlsjfhspythonslfjshdpy"
    rst8=re.search(pat8,string8)
    rst9=re.search(pat9,string8)
    print(rst8)
    print(rst9)
    
    #正则表达式函数
    #正则表达式函数有re.match()函数,re.search()函数,全局匹配函数,re.sub()函数
    #re.search()  从字符串中搜索出来
    #re.match()   从头开始匹配,如果一开始没有,那么就返回None
    #全局匹配函数
    #re.sub()     主要用于替换
    
    string10="phskfhskjhfkjshfjksgjfyskjhfksdh"
    rst10=re.match(pat8,string10)
    print(rst10)
    
    rst11=re.compile(pat8).findall(string10)   #全局搜索函数  显示所有满足条件的  后面用的最多
    print(rst11)
    
    #常见正则表达式实例
    #匹配.com .cn网址
    pat="[a-zA-Z]+://[^\s]*[.com|.cn]"
    string='<a href="http://www.baidu.com">fjsljflds</a>'
    rst=re.compile(pat).findall(string)
    print(rst)
    
    #简单的爬虫,如何爬取csdn某个课程页面上的QQ群
    pat="<p>(\d*?)</p>"
    import urllib.request
    data=urllib.request.urlopen("http://edu.csdn.net/huiyiCourse/detail/215").read()
    rst=re.compile(pat).findall(str(data))
    print(rst)
    
    #作业:如何爬取豆瓣出版社列表并写入文件中
    #豆瓣网址:https://read.douban.com/provider/all
    import urllib.request
    import re
    
    data=urllib.request.urlopen("https://read.douban.com/provider/all").read()
    data=data.decode("utf-8")
    pat='<div class="name">(.*?)</div>'
    mydata=re.compile(pat).findall(data)
    print(mydata)
    fh=open("/Users/xubin/myapp/pythonfile/出版社file4.txt","w")
    for i in range(0,len(mydata)):
        fh.write(mydata[i]+"\n")
    fh.close()
    

    二、Urllib库

    #python中Urllib库实战
    #系统学习urllib模块,从urllib基础开始。学习urlretrieve(),urlcleanup(),info(),getcode(),geturl()
    import urllib.request
    #urlretrieve() 直接将一个网页爬到本地
    urllib.request.urlretrieve("http://www.hellobi.com",filename="/Users/xubin/myapp/pythonfile/urlretrieve.html")
    
    #urlcleanup() 将urlretrieve产生的缓存,清空
    urllib.request.urlcleanup()
    
    #info()  将一些基础的环境信息展示粗来
    file=urllib.request.urlopen("http://www.hellobi.com")
    print(file.info())
    
    #getcode() 获取访问url的状态码,返货200,
    print(file.getcode())
    
    #geturl()  获取爬取得网址
    print(file.geturl())
    
    #超时设置
    #爬取一个网页,需要时间。访问网页,网页长时间未响应,系统判断网页超时了,无法打开网页。
    #服务器反应快设置2秒没反应未超时,如果服务器反应慢设置100秒没反应未超时,timeout超时时间为2 100
    file=urllib.request.urlopen("http://www.hellobi.com",timeout=1)
    
    for i in range(0,10):
        try:
            file=urllib.request.urlopen("http://yum.iqianyue.com",timeout=0.1)
            data=file.read()
            print(len(data))
        except Exception as e:
            print("出现异常:"+str(e))
    
    #自动模拟http请求
    #客户端如果要与服务器端进行通信,需要通过http请求进行,http请求有很多种
    #主要涉及post,get两种方式,比如登录,搜索某些信息的时候会用到
    #一般登录某个网站的时候,需要post请求
    #一般搜索某些信息的时候,需要get请求
    
    #在百度上搜索关键词,用python实现,需要用到请求,get  get请求URL中有?
    #https://www.baidu.com/s?wd=python
    import urllib.request
    import re
    keywd="徐彬"
    keywd=urllib.request.quote(keywd)
    url="http://www.baidu.com/s?wd="+keywd    #注意不能用https
    req=urllib.request.Request(url)
    data=urllib.request.urlopen(req).read()
    fh=open("/Users/xubin/myapp/pythonfile/百度python.html","wb")
    fh.write(data)
    fh.close()
    
    #post请求  比如需要登录用户  需要提交post请求
    #http://passport.csdn.net/account/login    用户名:username  密码:password
    import urllib.request
    import urllib.parse
    url="https://passport.csdn.net/account/login"
    mydata=urllib.parse.urlencode({"username":"bingoxubin","password":"19900127LLBingo"}).encode("utf-8")
    req=urllib.request.Request(url,mydata)
    data=urllib.request.urlopen(req).read()
    fh=open("/Users/xubin/myapp/pythonfile/csdn登录界面.html","wb")
    fh.write(data)
    fh.close()
    
    
    '''
    #爬取oa上的所有照片,存到OA照片.docx中  #遇到问题,目前所学,只能爬取单页的内容
    import re
    import urllib.request
    
    data=urllib.request.urlopen("oa.epoint.com.cn").read()
    data=data.decode("utf-8")
    pat=""
    mydata=re.compile(pat).findall(data)
    fh=open("/Users/xubin/myapp/pythonfile/OA照片.docx","w")
    for i in range(0,len(mydata)):
        fh.write(mydata[i]+"\n")
    fh.close()
    '''
    

    三、状态码

    #python爬虫的异常处理
    #爬虫遇到异常时就会直接崩溃停止运行,下次再运行时,又会从头开始。
    #开发一个具有顽强生命力的爬虫,必须要进行异常处理。
    
    #常见状态码以及含义
    #301 Moved Permanently:重定向到新的URL,永久性
    #302 Found:重定向到临时的URL,非永久性
    #304 Not Modified:请求的资源未更新
    #400 Bad Request:非法请求
    #401 Unauthorized:请求未经授权
    #403 Forbidden:禁止访问
    #404 Not Found:没有找到对应页面
    #500 Internal Server Error:服务器内部出现错误
    #501 Not Implemented:服务器不支持实现请求所需要的功能
    
    #异常处理的两个类URLError和HTTPError
    #HTTPError是URLError的子类,HTTPError有异常状态码及异常原因,而URLError没有异常状态码
    ##URLError发生的原因主要有:1.连不上服务器。2.访问的URL不存在。3.没有网络。4.触发了HRRPError子类
    
    import urllib.error
    import urllib.request
    try:
        urllib.request.urlopen("http://blog.csdn.net")
    except urllib.error.URLError as e:
        if hasattr(e,"code"):
            print(e.code)
        if hasattr((e,"reason")):
            print(e.reason)
    

    四、伪装技术

    #python爬虫的浏览器伪装技术
    #爬取csdn博客,会返回403错误,因为对方服务器会对爬虫进行屏蔽,此时需要伪装成浏览器才能爬取
    #浏览器伪装,一般通过报头进行。
    
    import urllib.request
    url="http://blog.csdn.net/bingoxubin/article/details/78503370"
    headers=("User-Agent","浏览器中User-Agent的值")
    opener=urllib.request.build_opener()
    opener.add_handlers=[headers]
    data=opener.open(url).read()
    print(len(data))
    

    五、爬新闻

    #python爬虫实例   爬取新闻
    #爬取新浪新闻首页中所有的新闻,爬到本地(http://news.sina.com.cn/)
    #实现过程,先爬首页,通过正则表达式获取所有新闻链接,然后依次爬各新闻,并存储到本地
    
    import urllib.request
    import re
    
    data=urllib.request.urlopen("http://news.sina.com.cn/").read()
    data2=data.decode("utf-8","ignore")
    pat='href="(http://news.sina.com.cn/.*?)"'
    allurl=re.compile(pat).findall(data2)
    for i in range(0,10):
        try:
            print("第"+str(i)+"次爬取")
            thisurl=allurl[i]
            file="/Users/xubin/myapp/pythonfile/sina/"+str(i)+".html"
            urllib.request.urlretrieve(thisurl,file)
            print("------成功-------")
        except urllib.error.URLError as e:
            if hasattr(e,"code"):
                print(e.code)
            if hasattr(e,"reason"):
                print(e.reason)
    
    展开全文
  • 可实际的爬虫开发项目往往运行需要耗时,对于增量式爬虫有时也是需要放到服务器上面跑的。这样我们就不能及时的观察到异常情况,那有没有比较容易实现的技术来解决这样的问题呢?(经验总结在最后) 答案是肯定的,...

    每当我们写爬虫的时候,短暂的代码运行与抓取如果期间出现异常情况,我们可以及时的发现。可实际的爬虫开发项目往往运行需要耗时,对于增量式爬虫有时也是需要放到服务器上面跑的。这样我们就不能及时的观察到异常情况,那有没有比较容易实现的技术来解决这样的问题呢?(经验总结在最后)

    答案是肯定的,有!那就是使用邮件通知,那具体如何操作呢?

    接下来我来模拟写一下需求:

    当爬虫出现故障时,第一时间通知程序员小哥哥来维护,采用邮件通知的方式。

    那我们首先来介绍一下 Python 当中支持 Smtp 协议模块叫什么名字,有以下两个模块以及他们对应的作用:

    email负责构造邮件

    smtplib负责发送邮件

    我们这里使用大家常用的 QQ 邮箱作为演示,小伙伴也可以使用其他邮箱可自行选择。在使用 QQ 邮箱时需要做以下配置。

    1. QQ 邮箱配置

    这里我们使用 SMTP 发信功能所以,您需要先开启 SMTP 发信功能才能通过 SMTP 接口发送邮件。

    SMTP 协议是一个简单的邮件传输协议,利用它您可以将邮件发送给别人。此协议使用命令和应答在客户端与服务器之间传输报文。即客户端发出一个命令,服务器返回一个应答。发送方与接收方进行一问一答的交互,由发送方控制这个对话。

    我先登陆到我们的 QQ 邮箱,界面如下:
    在这里插入图片描述
    选择设置,进入到如下界面:
    在这里插入图片描述
    找到:POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
    在这里插入图片描述
    QQ 邮箱 SMTP 服务器地址:smtp.qq.com, ssl端口:465。

    需要其他的服务器地址以及端口的小伙伴可以点击此链接:常用邮箱 SMTP 服务器地址大全

    2. Python 发送邮件

    以下实例你需要修改:发件人邮箱(你的QQ邮箱),密码,收件人邮箱(可发给自己)

    import smtplib
    from email.mime.text import MIMEText
    from email.utils import formataddr
    
    my_sender = '1432803776@qq.com'  # 发件人邮箱账号
    my_pass = 'xxxxxxxxx'           # 发件人邮箱授权码 不是qq密码   
    my_user = '1432803776@qq.com'    # 收件人邮箱账号,我这边发送给自己
    
    def mail():
        ret = True
        try:
            msg = MIMEText('填写邮件内容', 'plain', 'utf-8')
            msg['From'] = formataddr(["AI悦创", my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
            msg['To'] = formataddr(["aiyuechuang", my_user])  # 括号里的对应收件人邮箱昵称、收件人邮箱账号
            msg['Subject'] = "发送邮件测试"  # 邮件的主题,也可以说是标题
    
            server = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器,端口是25
            server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱授权码
            server.sendmail(my_sender, [my_user, ], msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
            server.quit()  # 关闭连接
        except Exception:  # 如果 try 中的语句没有执行,则会执行下面的 ret=False
            ret = False
        return ret
    
    ret = mail()
    if ret:
        print("邮件发送成功")
    else:
        print("邮件发送失败")
    

    运行代码效果如下:
    在这里插入图片描述
    3. 实战

    爬虫脚本是基于网站的结构去写的,但是随着互联网的发展,很多公司的页面结构会发生变化,发生的变化就会导致我们写的爬虫失效,最主要的失效方式是 xpath 的失效。随着我们写的爬虫越来越多,越就越来越难以发现这些失效的脚本,导致数据更新失败,不及时,或者不满足抓取的质量和数量要求。这就需要对爬虫的脚本进行监控。

    监控的目的是让数据及时的更新,脚本及时的发现 bug 以及解决 bug。提高我们的工作效率。更好的保证线上数据产品的优质性。

    目标网站:糗事百科>>> https://www.qiushibaike.com/text/

    爬虫代码如下:

    import requests
    from bs4 import BeautifulSoup
    from requests.exceptions import RequestException
    headers = {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',
    }
    
    class QiuShiBaiKe(object):
      def __init__(self, url):
        self.url = url
        self.headers = headers
    
      def requests_func(self):
        try:
          response = requests.get(self.url, headers = headers)
          if response.status_code == 200:
            return response.text
          return None
        except RequestException:
          return None
    
      def parse_page(self, html):
        soup = BeautifulSoup(html, 'lxml')
        result = soup.select('#content .content-block .col1 .article')
        for res in result:
          # imgs = res.select('.author a img')
          # print(imgs)
          img = res.select('.author a img')[0].get('src')
          # img = img[:len(user_name)-23]
          img = img[:img.find('.jpg') + len('.jpg')]
          user_name = list(res.select('.author a h2')[0].stripped_strings)[0]
          joke = list(res.select('.content span')[0].stripped_strings)[0]
          yield {
            'img':img,
            'user_name':user_name,
            'joke':joke,
          }
      def save_file(self, content):
        with open("joke.txt", 'a+' ,encoding = "utf-8")as f:
          f.write(content+"\n")
    
      def main(self):
        html = self.requests_func()
        for res in self.parse_page(html):
          self.save_file(str(res))
          print(res)
    
    if __name__ == '__main__':
      urls = ['https://www.qiushibaike.com/text/page/{}/'.format(page) for page in range(1, 14)]
      for url in urls:
        result = QiuShiBaiKe(url)
        result.main()
    

    3.1 添加邮件通知

    把邮件通知单独创建一个 .py 文件,代码如下:

    import smtplib
    from email.mime.text import MIMEText
    from email.utils import formataddr
    
    my_sender = '1432803776@qq.com'  # 发件人邮箱账号
    my_pass = 'xxxxxx'           # 发件人邮箱授权码 不是qq密码   
    my_user = '1432803776@qq.com'    # 收件人邮箱账号,我这边发送给自己
    
    def email_func(Email_content = None, Email_subject = None):
      try:
        msg = MIMEText(Email_content, 'plain', 'utf-8')
        msg['From'] = formataddr(["AI悦创", my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
        msg['To'] = formataddr(["aiyuechuang", my_user])  # 括号里的对应收件人邮箱昵称、收件人邮箱账号
        msg['Subject'] = Email_subject  # 邮件的主题,也可以说是标题
    
        server = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器,端口是25
        server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱授权码
        server.sendmail(my_sender, [my_user, ], msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
        server.quit()  # 关闭连接
        print("邮件发送成功")
      except Exception:
        print("邮件发送失败")
    
    if __name__ == '__main__':
      email_func("AIyuechuang", "hjb")
    

    上面的代码修改完毕之后,我们需要在爬虫的函数里面调用该函数,所以我们先导入函数:

    from email_f import email_func
    

    这里我们简单的进行调用函数:fromemail_fimportemail_func 更复杂的小伙伴可以自行添加哦。

    这里我们为了照顾绝大多数同学,就人工指定爬虫异常时放回特定信息。当然小伙伴还可以直接返回报错信息。

    我们编写在请求函数中:

    def requests_func(self):
        try:
          response = requests.get(self.url, headers = headers)
          if response.status_code == 200:
            email_func("请求成功, 返回数据", "QiuShiBaiKe_Spider")
            return response.text
          else:
            email_func("请求成功, 没有返回数据!", "QiuShiBaiKe_Spider")
            return None
        except RequestException:
          email_func("请求失败!", "QiuShiBaiKe_Spider")
          return None
    

    我们先正常运行代码查看效果:
    在这里插入图片描述
    至此,我们的邮件通知功能已经成功应用,这里有一点要跟小伙伴说的就是:为什么要把邮件单独写成一个 .py 文件,因为我们实际工作当中开发需要做到,模块化开发,上面所用到的是最基本的模块化。

    3.2 应用场景:

    3.2.1 正常更新的

    例如糗事百科,每天都要爬取一遍插入数据库的时候,需要增加一个字段更新插入时间 refresh_time 如果爬虫 正常,这样就可以保证,每天的 refresh_time 都是最新的。

    3.2.2 不正常更新的

    如何监控那些不正常更新的渠道(例如:链家租房),你可以写 sql 语句查询每个渠道的更新时间。如果是最新的更新时间则说明是正常;如果不是判断多久没有更新,说爬虫数据异常。这时需要给指定的负责人发邮件,让他修改代码,使得爬虫正常运行。

    3.2.3 爬虫中邮件通知一般加在哪呢?

    看到这里,表示你已经成功使用并监控你的爬虫,不过对于新手可能会有疑问:我们一般把异常通知加载呢?这里列出几点来:

    1. 这里小伙伴们在编写代码中要用好 try…except ,这里要注意:except后面如果指定了报错类型我们可以在你使用 except的后面添加邮件通知。

    2. 发起 get、post、head 等请求时,需要添加异常处理,因为有时候你会遇到一些:Url 异常、headers 所带参数被该网站的反爬技术改变等,这样我们添加之后就能快速定位到哪里报错。

    3. 解析网站时,有时会因为网站的 HTML 结构或者 JSON、Ajax 改变,这时我们也需要用到邮件通知。

    4. 总结

    这里我们讲到了 Python 发送邮件,并在爬虫中调用。在什么地方添加邮件通知会帮助我们快速出现问题的代码位置:

    try…except :要添加

    发起请求时要添加:get、post、head,因为有事还有一些应为你 SSL 造成问题。

    解析网站时,有事数据未抓取到,无法提取而造成的报错,也需要在解析网站的位置添加邮件通知。

    以上便是我总结的一些爬虫报警实战经验。希望对你的工作有所帮助。更多干货内容,欢迎关注公众号:知了python

    展开全文
  • 爬虫和反爬虫

    2018-04-20 10:04:00
    基本概念  爬虫:自动获取网站数据的程序,关键是批量的获取  反爬虫:使用技术手段防止爬虫程序的方法 ... 初级爬虫:简单粗暴,不管对服务器造成了多少压力,容易让网站服务器崩溃,这种爬虫也是最容易被...
  • 过快的采集会对网站服务器造成不小的压力,如果是性能差的小站可能就会被这么搞垮了。因此放慢采集速度相当于各退一 步,既给网站减轻压力,也降低自己被封禁的风险。爬虫目前在法律上尚属灰色地段,但爬别的网站...
  • 爬虫

    2017-05-19 17:06:00
    网络爬虫是搜索引擎的核心部分,网页爬虫持续不断的在互联网上爬行来寻找任何新的增加到网络中的页面和已经从网上删除页面。由于网页的持续的增长和动态性,遍历网络中所有的网址并处理已成为一种挑战。一个集中性的...
  • 认识爬虫

    2021-03-24 18:54:54
    爬虫,也叫网络蜘蛛,网络机器人,就是一段程序,可以自动的抓取网站数据,用python模拟人点击浏览器发送请求,获取数据,且模仿的越逼真越好,越不容易被服务器禁掉。它会占用服务器的部分资源 爬取数据的目的 1....
  • 爬虫学习

    2019-01-24 11:11:32
     网络爬虫介绍 网络爬虫(Web crawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本    什么是网络爬虫 在大数据时代,信息的采集是一项重要的工作,而互联网中的数据是海量的,如果单纯靠...
  • 文章目录什么是爬虫?为什么需要爬虫?企业获取数据的⽅式?为什么选择python爬虫原理爬虫分类通⽤⽹络爬⾍聚焦⽹络爬⾍增量式⽹络爬⾍深层⽹络爬⾍:robots协议 什么是爬虫? 简单⼀句话就是代替⼈去模拟浏览器进⾏...
  • 爬虫总结

    2020-12-01 15:05:44
    1. 初始爬虫 1.1 含义 就是使用编程语言所编写的程序,在互联网上模拟浏览器获取(大量)数据 1.2 浏览器的工作原理 发请求,得响应 1.3 爬虫的工作原理 发请求,得响应,数据的解析,数据提取,存储 1.4 数据...
  • 分布式爬虫爬虫共用同一个爬虫程序,即把同一个爬虫程序同时部署到多台电脑上运行,这样可以提高爬虫速度。在默认情况下,scrapy爬虫是单机爬虫,只能在一台电脑上运行,因为爬虫调度器当中的队列queue去重和set...
  • 写这篇 blog 其实一开始我是拒绝的,因为爬虫爬的就是cnblog博客园。搞不好编辑看到了就把我的账号给封了:)。言归正传,前端同学可能向来对爬虫不是很感冒,觉得爬虫需要用偏后端的语言,诸如 php , python 等。...
  • 其中在网页数据保护方面,我采取了很多种的反爬虫措施,所以在本篇文章中,我从源码和实际操作上给大家分析下我所使用的反爬虫及其对应的破解技巧。 首先我们声明的是,爬虫和反爬虫没有高低之分,虽然总有一种方法...
  • 分布式爬虫

    千次阅读 2018-08-13 21:42:26
    什么是分布式爬虫? 1.默认情况下,scrapy爬虫是单机爬虫,只能在一台电脑上运行,因为爬虫调度器当中的队列queue去重和set集合都是本机上创建的 其他的电脑无法访问另外一台电脑上的内存的内容。 2.分布式爬虫用...
  • 开始爬虫

    2020-11-21 23:38:55
    爬虫的基本原理 网页请求的过程分为两个环节: Request (请求):每一个展示在用户面前的网页都必须经过这一步,也就是向服务器发送访问请求。 Response(响应):服务器在接收到用户的请求后,会验证请求的有效性...
  • 爬虫入门

    2020-09-17 00:57:49
    文章目录了解网页认识网页结构HTMLCSSJScript写一个简单的 HTML关于爬虫的合法性使用 requests 库请求网站安装 requests 库爬虫的基本原理使用 GET 方式抓取数据使用 POST 方式抓取数据使用 Beautiful Soup 解析网页...
  • 走进爬虫

    2021-01-11 09:10:23
    当抓取的数据量逐渐增大时,会给被访问的服务器造成很大的压力,甚至有可能崩溃。换句话就是说,服务器是不喜欢有人抓取自己的数据的。那么,网站方面就会针对这些爬虫者,采取一些反爬策略。 服务器第一种识别爬虫...
  • 如果不使用try...except语句,程序就会崩溃(俗称异常退出)。在使用try...except语句捕捉异常时,except子句通常会加上错误类型,以便我们清楚地了解发生了什么错误。这些异常类都在urllib的error模块中定义,主要...
  • 爬虫遇到异常时就会直接崩溃停止运行,下次再次运行时,又会重新开始。所以开发一个具有顽强生命力的爬虫,必须进行异常处理。 2. 常见状态码及含义 200 :请求正常 301 Moved Permanently:重定向到新的URL,永久性 ...
  • Python 分布式爬虫

    2018-08-13 22:12:55
    1.什么是分布式爬虫  ①.默认情况下,scrapy爬虫是单机爬虫,只能在一台电脑上运行因为爬虫调度器当中的队列queue 去重和set集合都是在本机上 创建的其他的电脑无法访问另一台电脑上的内存的内容  ②.分布式爬虫...
  • 通俗来讲,分布式爬虫就是多台机器多个spider对多个url的同时处理操作,分布式的方式可以极大提高程序的抓取效率分布式爬虫一般要配合redis数据库使用,原因有3点:(1)redis数据库可以共享队列(2)重写Scheduler,让其无论...
  • selenium爬虫

    2019-12-23 18:22:06
    服务器发现你是爬虫后会封掉你的ip地址。这时候我们可以更改代理ip。更改代理ip不同的浏览器有不同的实现方式。这里使用我最常用的Chrome浏览器为例。 from selenium import webdriver chr...
  • 网络爬虫

    千次阅读 2010-04-16 00:11:00
     相对于通用网络爬虫,聚焦爬虫还需要解决三个主要问题:    (1) 对抓取目标的描述或定义;    (2) 对网页或数据的分析与过滤;    (3) 对 URL 的搜索策略。   抓取目标的描述和...
  • (1)我一般把n设置为300,程序启动时下载速度很快,能够达到每分钟100多份文件,虽然也能看到一些线程崩溃,但数量不多;但是大概10分钟后程序下载速度只有20多份文件,是因为很多线程已经挂掉了嘛,还是线程之间...
  • 爬虫常见面试

    千次阅读 多人点赞 2019-06-12 20:30:05
    一.项目问题: 1.你写爬虫的时候都遇到过什么反爬虫措施,你最终是怎样解决的 通过headers反爬虫:解决策略...基于动态页面的反爬虫:跟踪服务器发送的ajax请求,模拟ajax请求,selnium 和phtamjs。或 使用selenium ...
  • 爬虫Spider

    2021-01-11 01:38:55
    爬虫Spider 爬虫流程 库–获取网页(相当于人输入网址打开网页):requests/selenium ​ requests.get/post(url) ​ selenium(浏览器驱动)–方法:wbdriver–wbdriver.浏览器 创建浏览器对象 ​ ...
  •  更好保护服务器安全,服务器安全狗V4.1.08789 发布啦~~各位火速奔走相告!!O(∩_∩)O~  请到官网直接下载,下载地址为: http://www.safedog.cn/server_safedog.html  此次更新是针对近期用户的问题反馈...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,839
精华内容 1,535
关键字:

爬虫服务器崩溃

爬虫 订阅