本帖最后由 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()
|