吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3283|回复: 35
收起左侧

[Python 转载] 分享一下自己做的爬公告的小爬虫

  [复制链接]
qianaonan 发表于 2022-7-26 11:13
本帖最后由 qianaonan 于 2022-7-26 21:57 编辑

我这个是为了爬公开公告的小爬虫,初学者,写的不好的地方请各位多多包涵
这个爬虫我是加了一个判断,看内容是否有变化,有变化就发送server酱,我是申请了微信测试号,server酱里做了配置,这里的怎么去弄server酱的内容和寻找xpath就不做教程了网上教程很多
然后因为我不想一直运行这个脚本,所以需要新建一个txt文件,改后缀为json,保存复制地址到对应位置,每次更新公告会自动将所爬到的内容写到json文件里,以便下次方便比对,所以每次运行完一次爬取行为就会停止脚本的运行。
这个我是放到自己的小猫盘里用python3定时运行的,所以各位可以看着改一下,这里我这个新学者就不提供帮助了。
爬取思路:先爬取网址的xpath内容——比对json文件里的内容——把不同内容用post方式发送给server酱——个人端收到内容。
                                                                                                                                                                      在此郑重声明:
这个脚本只是一次性爬取内容并非多线程,就相当于你浏览器的一次访问,在这里奉劝大家不要拿这个脚本干啥坏事,特别是拿去商用(当然我觉得这么简单的脚本你也干不了啥坏事),被抓了与我无关,我这儿只做分享。
                                                                                                                                            在此郑重声明:
这个脚本只是一次性爬取内容并非多线程,就相当于你浏览器的一次访问,在这里奉劝大家不要拿这个脚本干啥坏事,特别是拿去商用(当然我觉得这么简单的脚本你也干不了啥坏事),被抓了与我无关,我这儿只做分享。

                                                                                                                                            在此郑重声明:
这个脚本只是一次性爬取内容并非多线程,就相当于你浏览器的一次访问,在这里奉劝大家不要拿这个脚本干啥坏事,特别是拿去商用(当然我觉得这么简单的脚本你也干不了啥坏事),被抓了与我无关,我这儿只做分享。


[Python] 纯文本查看 复制代码
# encoding:utf-8
#!/bin/python3
import re
import requests
import json #引入json库
import operator
from lxml import etree
# 爬取的网址
url = '链接地址'
# 请求头
header = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"}
html = requests.get(url, headers=header).text
etree_html = etree.HTML(html)
names= etree_html.xpath('/html/body/div[1]/div[2]/div[2]/div[2]/div[1]/div/div[1]/p[1]/a/text()')
#                         填入需要爬取的公告xpath
#读取json
class Read():
    def read_json(self):
        return json.load(open('json文件地址', 'r', encoding="utf-8"))#/volume1/photo/
read = Read()
a=read.read_json()
b=list(names)
bj = operator.eq(a,b)
c=set(names).difference(set(a))
print(c)
#比对
#判断json是否相同
if bj==True:
    print('无变化')
else:
    #发送post请求
    str = ''.join(str(i) for i in c)
    Cl = str.replace(' ', '\r')
    api = "填入server酱"
    title = u"监测点"
    data1 = {"text": title, "desp": Cl}
    req = requests.post(api,data=data1)
    print('发送成功')
#写入json
    filename= 'json文件所在地址'
    insertarr=names  #insertarr为存储数据的数组
    with open(filename,'w',encoding='utf-8') as file_obj:
        listallarr2=json.dumps(insertarr,ensure_ascii=False)        #处理中文乱码问题
        file_obj.write(listallarr2)
exit()

免费评分

参与人数 3吾爱币 +2 热心值 +3 收起 理由
jiuding2020 + 1 + 1 用心讨论,共获提升!
tianbukongbai + 1 + 1 谢谢@Thanks!
2997301883 + 1 我很赞同!

查看全部评分

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

 楼主| qianaonan 发表于 2022-7-26 15:59
本帖最后由 qianaonan 于 2022-7-26 16:00 编辑
JiangtaoChiu 发表于 2022-7-26 15:49
这是增量爬虫的简易通俗的表达形式嘛。感谢分享,借鉴借鉴。同时我有个小疑问,json文件是判断是否有新内容 ...

我这个脚本的思路就是只爬取不同的然后将该内容发送server酱,这个很好实现,首先公告是按时间顺序来发布的,每一次运行都是一次访问爬取操作,只是json里写入的是你上一次爬取的内容,然后跟这一次爬取的内容进行比对,发送不同的给server酱,然后把这一次的爬取的完整内容保存至json。
简而言之,思路就是先爬然后比对数据发送不同的数据,我这儿json文件只是用来储存数据用。
 楼主| qianaonan 发表于 2022-7-26 15:30
随遇而安8 发表于 2022-7-26 14:44
学习一下,operator这个库是干嘛的呢,百度上没讲明白

内置的操作符函数接口,它定义了一些算术和比较内置操作的函数。
简单点说就是函数映射操作,比如我脚本里写的operator意思是把两个list组进行比对,如果相同会输出true不相同则会输出false,这是eq的意思,eq(a,b)就相当于a==b的意思,具体的其他可以百度一下,还有什么ls啊这些很多,这个函数在用起来在一定程度上节省了一些步骤。
参考文章:http://t.zoukankan.com/kelly11-p-13370535.html
DTing 发表于 2022-7-26 11:26
Hewangcai 发表于 2022-7-26 11:30
谢谢分享,谢谢楼主
木人头 发表于 2022-7-26 11:31
技术是个好东西想啥写啥。
sdsgyr 发表于 2022-7-26 11:35
很棒~谢谢分享~
combosnoopy 发表于 2022-7-26 11:35
感谢分享
小卡爱熟妇 发表于 2022-7-26 11:45
感谢分享
liudaweijiyawei 发表于 2022-7-26 11:47
十分感谢
平淡最真 发表于 2022-7-26 11:53
同新手,18到20行写的很秀
earnm 发表于 2022-7-26 12:24
不敢爬gov的,危险危险
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-25 01:19

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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