Python中如何使用selenium编写知乎关键词爬虫并抓取钓鱼贴图片
demo
地址在这里 zhihu_fun Github,求 star !!!!
。。。嗯,其实也可以爬其他方面的东西,但是目前只支持抓图片,其实这不是我的本意,我是想抓技术方面的东西的,但是我同事想要看这个,所以我就先抓这些图片了。。。Python 菜鸟一枚,代码写的很烂,还望各位大神多多指教




为什么要用 Selenium ?
新版知乎部分页面用 React 重写了,必须得加载 JS ,很多加载啥的都需要点击,所以我就用到了 Selenium
为什么不用知乎 API ?
单纯的想写一个爬虫而已
Python中如何使用selenium编写知乎关键词爬虫并抓取钓鱼贴图片
一百次点击,无人回复,干的漂亮。
要写一个知乎关键词爬虫抓钓鱼贴图片,用Selenium得先装好驱动。核心思路是模拟登录、搜索关键词、过滤钓鱼贴、提取图片链接。下面给个完整示例:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import requests
import os
class ZhihuImageCrawler:
def __init__(self):
self.driver = webdriver.Chrome() # 需要提前下载chromedriver
self.wait = WebDriverWait(self.driver, 10)
def login(self, username, password):
"""模拟登录知乎"""
self.driver.get("https://www.zhihu.com/signin")
# 点击密码登录
self.wait.until(EC.element_to_be_clickable(
(By.CSS_SELECTOR, ".SignFlow-tab")
)).click()
# 输入账号密码
self.driver.find_element(By.NAME, "username").send_keys(username)
self.driver.find_element(By.NAME, "password").send_keys(password)
# 点击登录
self.driver.find_element(
By.CSS_SELECTOR, ".Button.SignFlow-submitButton"
).click()
time.sleep(3) # 等待登录完成
def search_keyword(self, keyword):
"""搜索关键词"""
search_input = self.wait.until(EC.presence_of_element_located(
(By.CSS_SELECTOR, ".SearchBar-input input")
))
search_input.clear()
search_input.send_keys(keyword)
search_input.send_keys(Keys.RETURN)
# 切换到"回答"标签页
self.wait.until(EC.element_to_be_clickable(
(By.XPATH, "//div[text()='回答']")
)).click()
time.sleep(2)
def extract_fishing_posts(self, max_scroll=5):
"""提取钓鱼贴内容,通过特定关键词识别"""
fishing_keywords = ['钓鱼', '骗局', '诈骗', '上当']
image_urls = []
for _ in range(max_scroll):
# 获取当前页面的所有回答卡片
cards = self.driver.find_elements(By.CSS_SELECTOR, ".List-item")
for card in cards:
try:
content = card.text
# 判断是否为钓鱼贴
if any(keyword in content for keyword in fishing_keywords):
# 提取图片
images = card.find_elements(By.TAG_NAME, "img")
for img in images:
src = img.get_attribute("src")
if src and "http" in src:
image_urls.append(src)
except:
continue
# 滚动加载更多
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
return list(set(image_urls)) # 去重
def download_images(self, urls, save_dir="zhihu_images"):
"""下载图片到本地"""
if not os.path.exists(save_dir):
os.makedirs(save_dir)
for i, url in enumerate(urls):
try:
response = requests.get(url, timeout=10)
if response.status_code == 200:
# 提取图片格式
ext = url.split('.')[-1].split('?')[0]
if len(ext) > 4:
ext = 'jpg'
filename = f"{save_dir}/image_{i}.{ext}"
with open(filename, 'wb') as f:
f.write(response.content)
print(f"已下载: {filename}")
except Exception as e:
print(f"下载失败 {url}: {e}")
def run(self, keyword, username=None, password=None):
"""主运行函数"""
try:
if username and password:
self.login(username, password)
self.search_keyword(keyword)
image_urls = self.extract_fishing_posts(max_scroll=3)
print(f"找到 {len(image_urls)} 张图片")
if image_urls:
self.download_images(image_urls)
finally:
self.driver.quit()
# 使用示例
if __name__ == "__main__":
crawler = ZhihuImageCrawler()
# 如果需要登录就传账号密码
crawler.run(
keyword="网络诈骗",
# username="your_username",
# password="your_password"
)
几个关键点:
- 需要先安装
selenium和requests:pip install selenium requests - 下载对应Chrome版本的chromedriver
- 钓鱼贴识别逻辑可以自定义关键词列表
- 知乎页面结构可能变化,需要适时调整CSS选择器
注意控制请求频率,避免被封IP。图片下载做了去重和格式处理,保存到本地文件夹。
总结:用Selenium模拟操作,通过关键词过滤钓鱼贴,提取图片链接下载。
厉害了
营养跟不上啊…农村人还是在 B 乎上 Block 这些话题吧
提醒:_b 去掉试试😏
哇,去掉了,发现更大的世界
楼主 66666
star 已送
这必须赞一波
已 star ,过了不到一个小时开始非常慢了,难道是把知乎扒光了?
按照关键字搜帖子的时候,发现很多帖子里面的图片都是无关的。 好奇怎么过滤的
让我想起了知乎上这个收藏 https://www.zhihu.com/collection/60771406 (大胸妹子 - 收藏夹 - 知乎)
你配置文件中的 url_generate_time 设置为多少,默认为 30s ,意味着爬问题只爬 30s, 剩下的就是怕回答中的图片,我爬了 20 多 g 了,设置为 None 就可以一直爬下去。。
这个的话,我并没有做,但是可以经爬下来之后做图像识别啥的,嗯,比较高端
很好,收藏了
#12 设置都是默认值
嗯,你设置 url_generate_time 为 None 就能一直爬了,我已经爬了 22G 了。。。
估计能扒到 nfsw 这类管理员来不及删的东西
可以搞个深度 CNN 分类器啦(雾)
感觉太高端了。。。
知乎不做 ip 限次?
好像没有。。。
已 S&F
先 mark ,回去 star
哎家里穷,不要发这样的照片
实践出真知!
专门抓大腿的
也可以抓其他东西啊,嘿嘿
再配合某云服务的图片鉴黄 api ,就完美了。。。
很好,已经 star
道友想法很不错啊 我也在微博爬呢-。-
https://github.com/airbasic/weibo_album_spider
改改我去爬 tumblr :)
支持楼主
感谢楼主,妹子到手了
感谢,哈哈

