如何使用Python和Selenium遍历网站内容并筛选含指定关键词的线程
没问题,你的需求其实很好实现,咱们一步步来调整代码就行~
首先,你现在通过threads = driver.find_element_by_id('threads').text拿到的是一整段包含所有线程内容的字符串,里面每一行线程信息是用换行符\n分隔开的。所以第一步要把这个大字符串拆分成单独的行,这样才能逐行检查关键词。
另外先提个小细节:你用的find_element_by_id是Selenium旧版本的写法,新版本已经弃用了,建议换成更规范的find_element(By.ID, 'threads'),同时路径里的\要注意转义问题,加个r变成原始字符串更稳妥。
下面是修改后的完整代码,我会一步步标注说明:
from selenium import webdriver from selenium.webdriver.common.by import By # 新增导入,用于定位元素 # 加r表示原始字符串,避免路径里的\被当成转义符 PATH = r"C:\Program Files (x86)\chromedriver.exe" driver = webdriver.Chrome(PATH) driver.get('https://boards.4channel.org/biz/catalog') # 改用新版本的元素定位方法 threads = driver.find_element(By.ID, 'threads').text driver.quit() # 可以提前关闭浏览器,因为已经拿到文本了 # 1. 把整段文本拆分成单独的行 thread_lines = threads.split('\n') # 2. 定义你要追踪的关键词列表,以后加关键词直接在这里加就行 target_keywords = ['DOGE', 'NFY', 'CORX'] # 3. 遍历每一行,筛选包含关键词的内容 matching_lines = [] for line in thread_lines: # 检查当前行是否包含任意一个目标关键词 for keyword in target_keywords: if keyword in line: matching_lines.append(line) break # 找到一个关键词就不用再检查其他的,避免重复添加 # 4. 输出筛选结果 print("找到包含目标关键词的内容:") for line in matching_lines: print(line)
如果你觉得循环写法有点繁琐,也可以用更Pythonic的列表推导式,效果是一样的:
# 用列表推导式一行完成筛选 matching_lines = [line for line in thread_lines if any(keyword in line for keyword in target_keywords)]
额外优化:忽略大小写匹配
如果论坛里有人用小写(比如doge)或者混合大小写(比如Doge)讨论,你可以把行文本和关键词都转成小写,这样就能匹配到所有大小写形式:
matching_lines = [] for line in thread_lines: line_lower = line.lower() for keyword in target_keywords: if keyword.lower() in line_lower: matching_lines.append(line) break
这样不管是DOGE还是doge都能被匹配到啦~
内容的提问来源于stack exchange,提问作者PopFendi
相关产品推荐
相关产品推荐

