精华内容
下载资源
问答
  • python爬虫实战万年历

    2021-02-22 21:45:12
    万年历的爬取 ... 目标:获取1970年到2021年每一天的天干地支 查看万年历网址的Network,在转换月份或者年份的时候发现network中出现了一些新的东西 点开一看,就是我们需要获取的数据,而且url方便更改,更改其中的...

    万年历的爬取

    目标网址:https://wannianrili.bmcx.com/
    万年历网页的示例

    目标:获取1970年到2021年每一天的天干地支

    查看万年历网址的Network,在转换月份或者年份的时候发现network中出现了一些新的东西
    在这里插入图片描述
    点开一看,就是我们需要获取的数据,而且url方便更改,更改其中的年份和月份即可对应。

    因为获取的是1970-2021的每一天,数据量比较大,所以在爬的过程中要做注意添加时间元件,控制每次爬取的速度。接下来编写代码:

    // An highlighted block
    import requests,openpyxl,time  # 导入模块
    from bs4 import BeautifulSoup
    import random
    wb = openpyxl.Workbook()
    sheet = wb.active
    sheet.title = '数据'  #自定义表名
    a = 1
    for i in range(1970,2022):
        if a == 1:
            for j in range(1,13):
                url = 'https://wannianrili.bmcx.com/ajax/?q={}-{}&v=20031912'.format(i,j)  #构造目标网址
                headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36',
                            'Referer': 'https://wannianrili.bmcx.com/'}
                res = requests.get(url, headers=headers)
                if res.status_code == 200:
                    soup = BeautifulSoup(res.text,'html.parser')
                    datas = soup.find_all(class_="wnrl_k_you")
                    for data in datas:
                        date = data.find(class_="wnrl_k_you_id_biaoti").text.replace(' ','').replace('\n','')
                        tian = data.find(class_="wnrl_k_you_id_wnrl_riqi").text.replace(' ','').replace('\n','')
                        text = data.find(class_="wnrl_k_you_id_wnrl_nongli_ganzhi").text.replace(' ','').replace('\n','')
                        date1 = date[:8] + tian + date[8:len(date)]
                        year = text[:7]
                        month = text[7:10]
                        day = text[10:len(text)]
                        sheet.append([date1,year,month,day])
                        time.sleep(5)
                    print(i,j)
                else:
                    print('Error')
                    a = 0
                    break
        else:
            print('错误')
            break
    wb.save('万年历.xlsx')
    wb.close()
    
    展开全文
  • 新版中国天气爬虫 获取最新天气 以及天气日历数据 Conky Linux
  • 一开始是想通过抓百度日历的请求API报文来看是否有现成的API接口给我们使用。不过只看到里面请求了一个类似这种接口: https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query=%E6%B3%95%E5%AE%9A

    项目里需要实现一个在工作日往工作群里定时发送消息的机器人,如何判断当天是否为工作日呢?肯定不能简单的判断是否为周末吧,在网上搜了一圈也没搜到。不过想到平时自己都是通过百度来看哪一天是否为工作日的,这就给我提供了思路。

    百度日历接口思路

    一开始是想通过抓百度日历的请求API报文来看是否有现成的API接口给我们使用。不过只看到里面请求了一个类似这种接口:

    https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query=%E6%B3%95%E5%AE%9A%E8%8A%82%E5%81%87%E6%97%A5&co=&resource_id=39042&t=1621517847359&ie=utf8&oe=gbk&cb=op_aladdin_callback&format=json&tn=wisetpl&cb=jQuery110209007543474552506_1621517847250&_=1621517847251
    

    这个返回的数据都只有一个日期列表是否为节假日,但是并没有哪一天是怎么补班的字段。后来在百度的HTML里面有大致看到一些控制“班”,“休”之类的逻辑,不过并没有接口返回原始数据。
    在这里插入图片描述
    于是这个办法我放弃了。

    通过网页爬虫抓取

    既然百度已经帮我们渲染好了某一个日期是否上班,那我们是不是可以直接抓取渲染好的页面?Java里面也有现成的库,大名鼎鼎的:HtmlUnit。废话不多说,直接写代码吧:
    先Maven引入最新库:

    <dependency>
    	<groupId>net.sourceforge.htmlunit</groupId>
    	<artifactId>htmlunit</artifactId>
        <version>2.50.0</version>
    </dependency>
    

    用Kotlin简单的写了如下代码:

    import com.gargoylesoftware.htmlunit.WebClient
    import com.gargoylesoftware.htmlunit.html.HtmlElement
    import com.gargoylesoftware.htmlunit.html.HtmlPage
    import java.time.LocalDate
    import java.util.*
    
    fun main() {
        println(isWorkday(LocalDate.of(2021, 10, 5)))
    }
    
    fun isWorkday(day: LocalDate): Boolean {
        val webClient = WebClient()
        val dayString = "${day.year}-${day.monthValue}-${day.dayOfMonth}"
        try {
            System.getProperties().put("org.apache.commons.logging.simplelog.defaultlog", "error");
            webClient.javaScriptTimeout = 5000
            webClient.options.isUseInsecureSSL = true //接受任何主机连接 无论是否有有效证书
            webClient.options.isJavaScriptEnabled = true //设置支持javascript脚本
            webClient.options.isCssEnabled = false //禁用css支持
            webClient.options.isThrowExceptionOnScriptError = false //js运行错误时不抛出异常
            webClient.options.timeout = 100000 //设置连接超时时间
            webClient.options.isDoNotTrackEnabled = false
            val page = webClient.getPage<HtmlPage>("https://www.baidu.com/s?wd=%E6%97%A5%E5%8E%86${dayString}")
            val body = page.body
    //            val todays = body.getElementsByAttribute<HtmlElement>("a", "date", day)
            val todays = body.getElementsByAttribute<HtmlElement>("a", "date", dayString)
            val today = todays[0]
            val map = today.attributesMap
            val classAttr = map["class"]
            val todayClass = classAttr!!.value
            if (todayClass?.contains("op-calendar-pc-table-rest") == true) {
                return false
            }
            if (todayClass?.contains("op-calendar-pc-table-work") == true) {
                return true
            }
            if (todayClass?.contains("op-calendar-pc-table-weekend") == true) {
                return false
            }
            return true
        } catch (e: Throwable) {
            // 有异常就直接判断当天是否为周末吧
            val now = Calendar.getInstance()
            val dayOfWeek = now.get(Calendar.DAY_OF_WEEK)
            return dayOfWeek !in 2..6
        } finally {
            webClient.close()
        }
    }
    

    大家可以每天在凌晨的时候执行一次,然后放到缓存里,这样也不用担心命中百度的频控,还能提升性能。

    展开全文
  • import time import requests as rq import re def local(): strtime=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()) return strtime html=rq.get("https://wannianrili.51240.com") ...
    import time
    import requests as rq
    import re
    def local():
        strtime=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())
        return strtime  
    html=rq.get("https://wannianrili.51240.com")
    # print(html.text)
    q=r'<span class="wnrl_td_gl">(\d\d)</span>'
    day=re.findall(q,html.text)
    p=r'<div class="wnrl_k_you_id_wnrl_nongli">(.+?)</div>'
    nongli=re.findall(p,html.text)
    o=r'<span class="wnrl_xuanze_top_wenzi">\d\d\d\d.\d(\d.)?</span>'
    month=re.findall(o,html.text)
    s=r'<span class=(?:"wnrl_td_bzl wnrl_td_bzl_hong"|"wnrl_td_bzl"|"wnrl_td_bzl wnrl_td_bzl_lv")>(.+?)</span>'
    jieri=re.findall(s,html.text)
    text=""
    for i in range(len(day)):
            text=text+month[0]+day[i]+"号"+"   "+nongli[i]+"  "+jieri[i]+"\n"
    print(text)
    reobject1=re.compile(r"\d\d\d\d月\d\d月\d\d日 详细信息")
    reobject2=re.compile(r'<span class="wnrl_k_xia_nr_wnrl_beizhu_biaoti">(.+?)</span>')
    reobject3=re.compile(r'<span class="wnrl_k_xia_nr_wnrl_beizhu_neirong">(.+?)</span>')
    cishu=int(local()[8:10])-1
    biaoti=re.findall(reobject1,html.text)[int(local()[8:10])-1]
    zbiaoti=re.findall(reobject2,html.text)[16*cishu:16*cishu+16]
    content=re.findall(reobject3,html.text)[16*cishu:16*cishu+16]
    count=0
    print(content)
    def pdjs(x):
        if x%2==0:
            return False
        else:
            return True
        
    info=""
    for i in range(16):
        count+=1
        info=info+zbiaoti[i]+":"+content[i]
        if pdjs(count):
            info=info+"      "
        else:
            info=info+"\n"
    print(biaoti+":\n"+info)

     

    展开全文
  • python 爬取百度日历

    2021-12-13 15:32:40
    导入依赖 import requests import json import random 生成随机数 dataTime = str(random.random()) ...def catch_url_from_baidu(calcultaion_year, month): header = { "Content-Type": "application/json;...

    导入依赖

    import requests
    import json
    import random
    

    生成随机数

    dataTime = str(random.random())
    

    从百度的php接口中获取到数据

    def catch_url_from_baidu(calcultaion_year, month):
        header = {
            "Content-Type": "application/json;charset=UTF-8"
        }
        param = {
            "query": calcultaion_year + "年" + month + "月",
            "resource_id": "39043",
            "t": dataTime,
            "ie": "utf8",
            "oe": "gbk",
            "format": "json",
            "tn": "wisetpl",
            "cb": ""
        }
        # 抓取位置:百度搜索框搜索日历,上面的日历的接口,可以在页面上进行核对
        r = requests.get(url="https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php",
                         headers=header, params=param).text
        month_data = json.loads(r)["data"][0]["almanac"]
        work_day = []
        for one in month_data:
            if (one["cnDay"] != '日' and one["cnDay"] != '六'
                    and ('status' not in one)):
                work_day.append(one)
        print(work_day)
    

    完整代码

    
    import requests
    import json
    import random
    
    dataTime = str(random.random())
    # 从百度的php接口中获取到数据
    def catch_url_from_baidu(calcultaion_year, month):
        header = {
            "Content-Type": "application/json;charset=UTF-8"
        }
        param = {
            "query": calcultaion_year + "年" + month + "月",
            "resource_id": "39043",
            "t": dataTime,
            "ie": "utf8",
            "oe": "gbk",
            "format": "json",
            "tn": "wisetpl",
            "cb": ""
        }
        # 抓取位置:百度搜索框搜索日历,上面的日历的接口,可以在页面上进行核对
        r = requests.get(url="https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php",
                         headers=header, params=param).text
        month_data = json.loads(r)["data"][0]["almanac"]
        work_day = []
        for one in month_data:
            if (one["cnDay"] != '日' and one["cnDay"] != '六'
                    and ('status' not in one)):
                work_day.append(one)
        print(work_day)
    
    if __name__ == '__main__':
        # 此处只能算当年之前的,因为国务院是每年12月份才会发布第二年的放假计划,所以此接口对于下一年的统计是错的。
        calcultaion_year = "2022"
        # 因该接口传入的时间,查询了前一个月,当前月和后一个月的数据,所以只需要2、5、8、11即可全部获取到。比如查询5月份,则会查询4,5,6月分的数据
        calculation_month = ["2", "5", "8", "11"]
        for one_month in calculation_month:
            catch_url_from_baidu(calcultaion_year, one_month)
    
    展开全文
  • 突然奇想,干脆写个爬虫爬一下百度的这个日历把。 接口分析 第一步,还是要分析下百度的接口才行,敲个"F12"(打开浏览器的开发人员工具),开始我们的旅程。 百度一下,你就知道 看到一条php调用记录,看看...
  • 比如一个在线日历网站,提供访问下个月和下一年的链接, 下个月又包含下下个月的页面,这样就会一直爬取,掉入爬虫陷阱。 简单的避免爬虫陷阱的方法是记录到达当前页面经过了多少个链接即深度, 设置一个阈值,到达...
  • 因为工作业务需要,需要判断得到的日期是否是节假日(包括周末),并返回最近的工作日(如果获得的日期就是工作日,则返回该日期本身)自己实现其实很麻烦,我是通过workalendar这个第三方组件包实现的。...
  • 写的一个爬虫程序,主要用到以下库。但是伴随着代码增多,功能增多。经常性的程序崩溃现象,逐渐显现。pyqt5_5.8.2,requests.get,selenium+chorme,threading.Thread,queue.Queue多次完善代码与程序,甚至已经...
  • #项目名称: #项目简介: #作 者:key #开发时间:2020/10/24 17:13 from urllib.request import urlopen url = 'http://www.baidu.com' #发送消息 response = urlopen(url) #读取内容 ...prin
  • vba 爬虫常用对象和方法

    万次阅读 2017-01-20 10:56:20
    最近又要小爬一下动态网页,于是复习了一下常用对象。Sub WebCrawler(ByRef Item, ByRef DraftPage)Dim sKey As String Dim k As Integer sKey = "Time In Source Status" k = 0Dim GUrl As String GUrl = ...
  • 用python做日历

    千次阅读 2020-11-20 21:56:21
    作者:小f 来源:法纳斯特(walker398)又到了岁末年初的时候,市面上出了很多各种主题的日历。 最近我在看《python编程快速上手-让繁琐工作自动化》一书,看到书中「处理excel电子表格」章节时触发了灵感,想着我也...
  • 代码中首先计算了10年的时间天数为3662,达到对应的时间字符串,爬虫的数据放在csv文件中。通过requests模块进行post,返回的html文件,尝试了json等方式都无法提取到相应的客流量数据,最后采用了字符串的处理方法...
  • Python 爬虫系列教程一爬取批量百度图片

    万次阅读 多人点赞 2018-07-29 19:40:05
    很久之前就学习了Python的爬虫了,也用来做过一些项目(主要是一些课程项目),但时间比较紧,一直没有空把它写下来,这个暑假,我可能会逐渐更新Python爬虫的相关知识。 项目1:实现批量爬取百度图片 先简单的...
  • 好吧,我也只能乖乖地把课程表整理下,一起导入到日历里。其实 App Store 里课程表的应用并不少,各个学校也可能有自己的教务系统爬下来做出来的课程助手,所以管理课程这件事并不是难事。但是谁叫我生来(才怪)就是...
  • python爬虫高级功能

    千次阅读 2017-03-08 16:31:58
    上一篇文章中我们介绍了爬虫的实现,及爬虫爬取数据的功能,这里会遇到几个问题,比如网站中robots.txt文件,里面有禁止爬取的URL,还有爬虫是否支持代理功能,及有些网站对爬虫的风控措施,设计的爬虫下载限速功能...
  • 根据书中的「处理Excel电子表格」章节内容,做出一份专属日历。 使用的模块为openpyxl,一个能读取和修改Excel电子表格的Pyhton模块。 实现自动化处理表格信息,摆脱无趣无味。 此外还有calendar模块,通过该模块...
  • Python爬虫,高清美图我全都要(彼岸桌面壁纸)

    万次阅读 多人点赞 2020-03-30 11:13:49
    因为我的电脑的分辨率为1920 × 1080,所以我爬取的图片的分辨率为此 彼岸桌面壁纸提供了许多分类供我们浏览:日历、动漫、风景、美女、游戏、影视、动态、唯美、设计… 4k分类下的壁纸是该网站收益的重要资源,而且...
  • import urllib.request import urllib.parse import re import os #添加header,其中Referer是必须的,否则会返回403错误,User-Agent是必须的,这样才可以伪装成浏览器进行访问 header=\ { 'User-Agent': 'Mozilla/...
  • Python爬虫入门与进阶

    2020-12-20 12:41:09
    爬虫是在没有(用)API获取数据的情况下以Hack的方式获取数据的一种有效手段;进阶,就是从爬取简单页面逐渐过渡到复杂页面的过程。针对特定需求,爬取的网站类型不同,可以使用不同的python库相结合,达到快速抓取...
  • 豆瓣简单爬虫案例

    千次阅读 2018-12-13 16:32:44
    D:\PycharmProjects/爬虫模块1213/pachong_case.py <!DOCTYPE HTML> 提供图书、电影、音乐唱片的推荐、评论和价格比较,以及城市独特的文化生活。"> 豆瓣,广播,登陆豆瓣"> ; url=...
  • 该项目分为两个模块:1,数据准备阶段 采用python网络爬虫,实现所需数据的抓取;2,数据处理和数据可视化,采用r语言作为分析工具并作可视化展示。第一,数据准备模块数据来源选用笔者所在学校的内网(校内俗称OB),...
  • 那么你得需要进行爬虫项目的演练,那样你才有可能在Python爬虫的道路上走的更远小编在这里精心总结了20个爬虫项目的演练,是目前爬虫高手一直专注的领域。小编将为大家提供这些项目的源码供大家参考练习!!致敬奋斗...
  • 用python爬取课表并导入至ios日历

    千次阅读 2020-10-27 19:45:14
    由于学校没有课表接口,不能使用超级课程表之类的课表软件,并且手上有块apple watch,便想将课表信息导入到日历中,每天就可以优雅的看到课程信息了。 ok,本教程需要一定的爬虫基础,因为各个学校的教务网站不同,...
  • 爬虫陷阱

    2018-11-10 10:24:00
    比如,网站有一个在线日历功能,提供了可以访问下个月和下一年的链接,那么下个月的页面中同样会包含访问再下个月的链接,这样页面就会无止境地链接下去,这种情况被称为爬虫陷阱。 想要避免陷入爬虫陷阱,一个简单...
  • 爬虫

    2019-01-03 21:51:00
    网络爬虫领域介绍 爬虫的合法与非法性 对目标网站进行背景调研 逐步完善一个高级网络爬虫 1.1 网络爬虫的使用场景 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一...
  • Python日期 Python日期章节,由表示大日期的calendar, date模块,逐渐过渡到...1 年的日历图导入所需模块和函数import calendarfrom datetime import date绘制年的日历图mydate = date.today()year_calendar_str =...
  • Selenium是一个Web自动化测试工具,它可以根据我们的指令,让浏览器自动加载...所以它很适合帮助我们构建网络爬虫了,而这个爬虫不仅能处理 JavaScrip、Cookie、headers信息,并且还能帮我们模拟真实用户的操作流程。
  • // 使用爬虫获取 Document document = Jsoup.connect(url).get(); getElmentAndInsert(document,baiduNewsMapper,"实时热点"); // 获取新闻列表 Elements lis = document.select("#flist li"); for (int i = 2...
  • 【Java】java日历

    千次阅读 多人点赞 2016-01-13 21:34:47
    应用名称:Java日历 用到的知识:Java GUI编程,日期操作 开发环境:win8+eclipse+jdk1.8 功能说明:一个很简单的万年历,可以选择年份和月份,也可以用按钮翻页,日历会实时更新日期,最下方会显示当前操作系统...

空空如也

空空如也

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

日历爬虫

爬虫 订阅