前言
阅读时间:4分钟左右
众所周知,社区几乎没有反爬策略,于是我们可以轻松地开发一个爬虫。
(脚本,采集的数据放到了最后)
编写
1.确定非置顶帖子名字的xpath
首先,在登录状态下进入社区https://bbs.zkaq.cn/
我们的目标是爬取每一页的每个帖子,但是不包含重复的置顶帖子,我们这里将使用绝对路径的方法。我们看一下源码,找到帖子名字所在的位置检查,然后右键,copy,copy xpath。但是这个复制出来的是位置,不是值,所以要增加text()。另一方面,我们只选中了一个帖子名字,那么怎么选中除了置顶的所有的帖子名字呢?
-
/html/body/div[1]/div[1]/div[3]/div[2]/div[8]/div/h4/a[2]/span
这就是图中的PTE考试靶机什么的xpath位置,可以看见这里有很多切片,那么我们可以尝试去除任意切片,观察选中的帖子。经过尝试,删除[8]可以选中所有非置顶帖子。而且正好没有选中置顶帖子。
-
/html/body/div[1]/div[1]/div[3]/div[2]/div/div/h4/a[2]/span
2. 观察url变化
进入
-
https://bbs.zkaq.cn/new/1.html
再切换到下一页
-
https://bbs.zkaq.cn/new/2.html
可以发现就是html前面的数字加了1,我们可以使用for循环增加每一个数字。
3. 编写
-
import requests
-
from lxml import etree
-
i = 1
-
while i <= 260:
-
link = f'https://bbs.zkaq.cn/new/{i}.html'
-
response = requests.get(link)
-
i = i + 1
-
text = response.content.decode()
-
html = etree.HTML(text)
-
a_list = html.xpath("/html/body/div[1]/div[1]/div[3]/div[2]/div/div/h4/a[2]/span/text()")
-
for a in a_list:
-
print(a)
import就是导入库,这里导入的是请求库和解析库
i = 1是给i赋一个初始值,如果直接while会报错
while是指在i<=260时,不断执行以下操作:
访问这个网页,并且访问完后这个i继续加1,就是访问下一页,直到260页。
然后对response进行utf8解码,赋值给text
然后使用etree的HTML类初始化,赋值给html
然后使用xpath语法提取所有的帖子名
由于得到的是列表,所以用for循坏提取列表里的每个元素,最后打印出来,就是我们想要的了。
声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权!
免费领取安全学习资料包!
渗透工具
技术文档、书籍
面试题
帮助你在面试中脱颖而出
视频
基础到进阶
环境搭建、HTML,PHP,MySQL基础学习,信息收集,SQL注入,XSS,CSRF,暴力破解等等
应急响应笔记
学习路线