吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5008|回复: 24
收起左侧

[原创] 爬虫小试牛刀(爬取学校通知公告)

  [复制链接]
Alexwhich 发表于 2023-6-21 12:34
本帖最后由 Alexwhich 于 2023-6-24 12:56 编辑
    • 完成抓取并解析通知公告12页数据,并提交excel文件格式数据,数据需要包含日期标题,若能够实现将详情页主体内容与发布人信息数据也一并抓取更佳
    • 提交内容:Excel数据文件

爬虫开始

首先看到页面呈现规则的各个方框,这意味着它们之间的一定是一样的

此处该有图

pC32YiF.png

我们点开后台可以看见属于通知活动的代码中很多这类<li>标签

<li>
   <a href="../info/1042/48792.htm" target="_blank" title="关于开展2018届毕业生中期发展评价的通知">
        <div class="box">
            <div class="time">
            <div class="ll">
                <img src="../images/list_box_07_ico.png" alt="">2023.06.09
            </div>
            <div class="rr">
                <img src="../images/list_box_24_ico.png" alt="">
            </div>
            </div>

            <h5 class="overfloat-dot-2">关于开展2018届毕业生中期发展评价的通知</h5>
        </div>
        </

那么我们可以分别截取一下几个标签,分别是

时间标签:<div class="ll">
标题标签:<h5 class="overfloat-dot-2">

前期工作准备结束了,让我们打开pycharm,引入本次的包

import requests #经典请求包
from bs4 import BeautifulSoup
import pandas as pd #生成xlsx文档包

为了我们的页面的中文正常输出,我们必须对获取的内容进行一个转码

 url = 'example.com' + str(page) + '.htm'
    r = requests.get(url)
    r.encoding = 'utf-8'

我观察到页面的顺序并不是从1往后的,而是从第12页为1.html,第11页为2.html,以此类推,而第一页则是index/tzgg.htm。

所以我的循环体设置循环12次,最后一次如果返回的是404的话,则访问的上面的网页

    if r.status_code == 404:
        url = 'example.com/index/tzgg.htm'
        r = requests.get(url)
        r.encoding = 'utf-8'

根据开头的标签,接下来就可以直接获取该标签上面的内容

title = article.find('h5', {'class': 'overfloat-dot-2'}).text.strip()
date = article.find('div', {'class': 'll'}).text.strip()

此时你会发现我没有解释这个article怎么来的,是因为我发现如果只是按照上面的方法直接获取<li>标签的话,页面中其他的该标签也会算进来,到时候就分不开产生bug。

所以为了区别开其他的同种标签,页面范围内比<li>大的标签,可以排除掉其他同类型标签的影响

articles = soup.find('section', {'class': 'n_container'})
articles = articles.find_all('li')

到这里,时间和标题我们就得到了。接下来我们需要到详情页去获取发布者名字

同样,详情页的url也在<li>标签中

href = article.find('a', href=True)
href = href['href']
article_detail_url = 'example.com' + href

然后通过再访问这个链接进去以同样的方式获取发布者名字,还得和上文一样,分开是不是第一页的子链接,如果是则需要更换第一页的url才能防止返回404状态。

article_detail_url = 'example.com/index/tzgg/' + href

# 获取详情页信息
detail_r = requests.get(article_detail_url)
if detail_r.status_code == 404:
    url = 'example.com'+href
    detail_r=requests.get(url)
    detail_r.encoding = 'utf-8'
    detail_soup = BeautifulSoup(detail_r.text, 'html.parser')
    author = detail_soup.find('h6').find_all('span')[2].text

我们需要的信息就完全抓取下来了。本次任务就结束了,接下来的导出excel文件

# 将数据存储成DataFrame,并导出为Excel文件
df = pd.DataFrame(data_list, columns=['日期', '标题', '发布者'])
df.to_excel('通知公告.xlsx', index=False)

总结

这次做完通知公告爬虫,感觉不是很难,因为网站没有对请求头进行限制,所以让我直接request就行了。

不过这次让我对python在爬虫之类的作用更加感兴趣,希望下次能了解更多的这类知识,以后也能学会如何防爬虫的知识。

免费评分

参与人数 9吾爱币 +10 热心值 +9 收起 理由
wangshuo123 + 1 感谢您的宝贵建议,我们会努力争取做得更好!
fgwsnd + 1 + 1 我很赞同!
bury咩 + 1 + 1 热心回复!
Sure555 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
L無名 + 1 + 1 热心回复!
魔道书生 + 2 + 1 我很赞同!
huasuxu + 1 + 1 我很赞同!
kuangxiao + 1 + 1 热心回复!
天空宫阙 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

hualonghongyan 发表于 2023-6-21 15:13
这个技术难度,一颗星这样
冰镇苏打水 发表于 2023-6-21 12:47
milu1123 发表于 2023-6-21 16:16
没有网页连接差评,不然还可以给你优化代码
wangguang 发表于 2023-6-21 16:57
emmmm,挺好的。加油
 楼主| Alexwhich 发表于 2023-6-21 17:51
冰镇苏打水 发表于 2023-6-21 12:47
让学校改版.做成前后端分离的,直接抓接口.

学校也不知道这个事情,我都不知道有没有这个接口
 楼主| Alexwhich 发表于 2023-6-21 17:52
milu1123 发表于 2023-6-21 16:16
没有网页连接差评,不然还可以给你优化代码

不用了,我这单纯抓着玩的
 楼主| Alexwhich 发表于 2023-6-21 17:53
hualonghongyan 发表于 2023-6-21 15:13
这个技术难度,一颗星这样

肯定,不然怎么叫小试牛刀
头像被屏蔽
moruye 发表于 2023-6-21 22:44
提示: 作者被禁止或删除 内容自动屏蔽
lcg2014 发表于 2023-6-22 17:11
现在流氓公司单位学校都要APP,没有网页,狗日的马云
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 21:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表