分享一下自己做的爬公告的小爬虫
本帖最后由 qianaonan 于 2022-7-26 21:57 编辑我这个是为了爬公开公告的小爬虫,初学者,写的不好的地方请各位多多包涵
这个爬虫我是加了一个判断,看内容是否有变化,有变化就发送server酱,我是申请了微信测试号,server酱里做了配置,这里的怎么去弄server酱的内容和寻找xpath就不做教程了网上教程很多。
然后因为我不想一直运行这个脚本,所以需要新建一个txt文件,改后缀为json,保存复制地址到对应位置,每次更新公告会自动将所爬到的内容写到json文件里,以便下次方便比对,所以每次运行完一次爬取行为就会停止脚本的运行。
这个我是放到自己的小猫盘里用python3定时运行的,所以各位可以看着改一下,这里我这个新学者就不提供帮助了。
爬取思路:先爬取网址的xpath内容——比对json文件里的内容——把不同内容用post方式发送给server酱——个人端收到内容。
在此郑重声明:
这个脚本只是一次性爬取内容并非多线程,就相当于你浏览器的一次访问,在这里奉劝大家不要拿这个脚本干啥坏事,特别是拿去商用(当然我觉得这么简单的脚本你也干不了啥坏事),被抓了与我无关,我这儿只做分享。
在此郑重声明:
这个脚本只是一次性爬取内容并非多线程,就相当于你浏览器的一次访问,在这里奉劝大家不要拿这个脚本干啥坏事,特别是拿去商用(当然我觉得这么简单的脚本你也干不了啥坏事),被抓了与我无关,我这儿只做分享。
在此郑重声明:
这个脚本只是一次性爬取内容并非多线程,就相当于你浏览器的一次访问,在这里奉劝大家不要拿这个脚本干啥坏事,特别是拿去商用(当然我觉得这么简单的脚本你也干不了啥坏事),被抓了与我无关,我这儿只做分享。
# 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/div/div/div/div/div/div/p/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()
本帖最后由 qianaonan 于 2022-7-26 16:00 编辑
JiangtaoChiu 发表于 2022-7-26 15:49
这是增量爬虫的简易通俗的表达形式嘛。感谢分享,借鉴借鉴。同时我有个小疑问,json文件是判断是否有新内容 ...
我这个脚本的思路就是只爬取不同的然后将该内容发送server酱,这个很好实现,首先公告是按时间顺序来发布的,每一次运行都是一次访问爬取操作,只是json里写入的是你上一次爬取的内容,然后跟这一次爬取的内容进行比对,发送不同的给server酱,然后把这一次的爬取的完整内容保存至json。
简而言之,思路就是先爬然后比对数据发送不同的数据,我这儿json文件只是用来储存数据用。 随遇而安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 谢谢分享 谢谢分享,谢谢楼主 技术是个好东西想啥写啥。 很棒~谢谢分享~ 感谢分享 感谢分享 十分感谢 同新手,18到20行写的很秀 不敢爬gov的,危险危险