爬虫进阶之社区实战

前言

阅读时间:4分钟左右
众所周知,社区几乎没有反爬策略,于是我们可以轻松地开发一个爬虫。
(脚本,采集的数据放到了最后)

编写

1.确定非置顶帖子名字的xpath

首先,在登录状态下进入社区https://bbs.zkaq.cn/

图片


我们的目标是爬取每一页的每个帖子,但是不包含重复的置顶帖子,我们这里将使用绝对路径的方法。我们看一下源码,找到帖子名字所在的位置检查,然后右键,copy,copy xpath。但是这个复制出来的是位置,不是值,所以要增加text()。另一方面,我们只选中了一个帖子名字,那么怎么选中除了置顶的所有的帖子名字呢?

图片

 
  1. /html/body/div[1]/div[1]/div[3]/div[2]/div[8]/div/h4/a[2]/span

这就是图中的PTE考试靶机什么的xpath位置,可以看见这里有很多切片,那么我们可以尝试去除任意切片,观察选中的帖子。经过尝试,删除[8]可以选中所有非置顶帖子。而且正好没有选中置顶帖子。

 
  1. /html/body/div[1]/div[1]/div[3]/div[2]/div/div/h4/a[2]/span

2. 观察url变化

进入

 
  1. https://bbs.zkaq.cn/new/1.html

图片


再切换到下一页

 
  1. https://bbs.zkaq.cn/new/2.html

图片


可以发现就是html前面的数字加了1,我们可以使用for循环增加每一个数字。

3. 编写

 
  1. import requests

  2. from lxml import etree

  3. i = 1

  4. while i <= 260:

  5. link = f'https://bbs.zkaq.cn/new/{i}.html'

  6. response = requests.get(link)

  7. i = i + 1

  8. text = response.content.decode()

  9. html = etree.HTML(text)

  10. a_list = html.xpath("/html/body/div[1]/div[1]/div[3]/div[2]/div/div/h4/a[2]/span/text()")

  11. for a in a_list:

  12. 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,暴力破解等等

应急响应笔记

学习路线

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值