遵循着三天打鱼两天晒网的准则, leetcode 刷题在周末暂且休息一下,来写个爬虫玩玩
本文发布已经知乎用户- 稳重 许可
一个同学的文章太厉害了,同学们几乎都是他的粉丝,借由大家在假期都回到了自己的 IP 地址之地,我们只需要知道同学的出生地就能“盒”到账号
爬虫最简单的应该也就是直接用 request 和 BeautifulSoup 了吧
要爬取的是处于 div 中的元素,以此编写以下代码
def get_user(): url='https://www.zhihu.com/people/wen-zhong-16-88/followers?page=2' response = requests.get(url) soup = BeautifulSoup(response.text,'html.parser') elements = soup.find_all('css-1gomreu') PRINT(elements)
但怎么只打印了个空方框!怎么回事?
再打印一下 status_code. 好! 200 没有问题
接着一步一步往上排查,让我们打印一下 response.text
不对啊,这是能跑出来的,那是 find 操作有问题吗?Ctrl+F 让我搜搜有没有 css-1gomreu :
0 result!难道我被反爬了吗,加上 cookie 什么的再看看?
def get_user(): url='https://www.zhihu.com/people/wen-zhong-16-88/followers?page=2' headers = { "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "Cookie": "略" ,"X-Zse-93":"略" ,"X-Zse-96":"略" ,"X-Zst-81":"略" } response = requests.get(url,headers=headers)
好!还是没有搜出来!(后续以为是在同一 url 中有请求 再加了params ,亦无果)
那就让我们把打印出来的 response.text 直接放浏览器里好了
结果也是非常 Amazing 啊!除了我想要的元素以外都显示出来了
(这是在没用 headers 的情况,用了显示的就是 3 秒后跳转知乎首页了)
此时把 QQ 状态改成 emo 中,先歇一下
考虑到使用 request 还是蛮抽象的,毕竟也是看不见摸不着,让我们直接调一个浏览器看看吧
from selenium import webdriver import time driver = webdriver.Chrome() driver.get("https://www.zhihu.com") time.sleep(30) driver.get("https://www.zhihu.com/people/wen-zhong-16-88/followers?page=3") time.sleep(600) driver.quit()
(尝试过写登录模块,但检索不到【密码登录】,还是留 30 秒自己来登算了),可以得到以下画面
结果也是非常的神奇,后面索性将 url 改为官网,想看看是不是应该一步一步跳转才行,发现结果是一致
顿时想到我在想着拿爬虫抢课时许佬和我讲的一句话
“你都上 selenium 了,怎么不直接写脚本”
那就写!当然读者可能会疑惑,标题中的“面向 AI ”到底在何处还未露面?就在此处
鉴于网上对 js 脚本的课程较少,直接上 ChatGPT
http://www.poe.com/ChatGPT
(未用官网是因为懒)
如何写js脚本查找所有在某个class中的元素
要编写一个 JavaScript 脚本来查找在特定类别(class)中的所有元素,可以使用 `document.getElementsByClassName()` 方法。这个方法可以通过类名获取文档中所有具有相同类名的元素。
以下是一个示例脚本,它将查找具有指定类名的所有元素,并将它们打印到控制台:
// 获取所有具有指定类名的元素 var elements = document.getElementsByClassName('your-class-name'); // 遍历所有找到的元素并打印它们 for (var i = 0; i < elements.length; i++) { console.log(elements[i]); }在上面的代码中,将 `your-class-name` 替换为你要查找的类名。这个脚本将返回一个 HTMLCollection 对象,其中包含了匹配的所有元素。然后,使用一个循环遍历这个集合,并使用 `console.log()` 将每个元素打印到控制台。
但其实我也不知道这东西打印到哪里,于是我想着用 alert 实现 ,再加上每 5 秒执行一次(这样的想法显然是来源于抢课,不过其实是因为要等待 html 加载完毕,而我不知道等待加载完毕的 js 怎么写)
我希望你写一个js脚本,每5秒查找一次网页上class为css-1gomreu的元素并用alert打通知,如果查找不到就发通知说没找到
当然,我可以为您编写这样的 JavaScript 脚本。请注意,由于我是一个纯文本模型,无法直接在浏览器中执行 JavaScript。我将提供一个示例代码,您可以将其复制到您的项目中并在浏览器中运行。
function checkElement() { var element = document.querySelector('.css-1gomreu'); if (element) { alert('找到了!'); } else { alert('未找到!'); } } setInterval(checkElement, 5000);这段代码定义了一个 checkElement 函数,它使用 document.querySelector 方法查找网页上具有 css-1gomreu 类名的元素。如果找到该元素,它将使用 alert 弹出一个提示框,显示 "找到了!";如果未找到,它将显示 "未找到!"。
然后,我们使用 setInterval 函数每隔 5 秒调用一次 checkElement 函数,以实现每5秒钟检查一次。
请确保将此代码放在您的网页的