使用selenium爬取fofa中链接的网站正文

本文介绍如何使用Selenium爬取fofa中链接的网站正文。由于需要登录,故仅能爬取5页,会员则可爬取更多。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如题,可能有人不明白啥意思,看下图,本文就是爬取fofa中红色圈圈的内容,红色圈圈是fofa存储的其他链接的HTML,点击这个图标就会弹出界面,界面里面就是HTML,我们就是爬这个东西。

由于登录后只能爬5页,所以我们只爬5页。

import requests
from bs4 import BeautifulSoup
from selenium import webdriver
import os,time
import pandas as pd
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

#app表示我们要搜索的标题
app=["海康威视-视频监控","NUUO-视频监控","北京银河伟业-视频监控","大华-视频监控","Brickcom-视频监控","DASAN_Networks-视频监控","ACTi-视频监控","Vicon-视频监控","雄迈-视频监控"]
#这是启动chromedriver,这东西网上有,下载过来放Chrome里
browser=webdriver.Chrome(executable_path='C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe')
#先随便打开一个网址
browser.get("https://fofa.so/result?q=app%3D%22%E6%B5%B7%E5%BA%B7%E5%A8%81%E8%A7%86-%E8%A7%86%E9%A2%91%E7%9B%91%E6%8E%A7%22&qbase64=YXBwPSLmtbflurflqIHop4Yt6KeG6aKR55uR5o6nIg%3D%3D")




接下来需要在打开的网址登录,主要是登录后才可以爬5页,如果你有会员可以爬更多,

然后

def search():
    html_text=[]
    for j in range(5):
        input_name=browser.find_elements_by_xpath('//div[@class="re-list-icons"]/a/i[@class="iconfont icondaima colorHover"]') #获得全部“网站正文”图标的位置
        print(len(input_name)) #查看图标数量
        for i in range(len(input_name)):
            input_name[i].click() #点击图标,弹出窗口
            while True:
                try:
                    if WebDriverWait(browser,10).until_not(EC.staleness_of(browser.find_element_by_xpath('//div/span[@class="layui-layer-setwin"]/a'))):  #判断窗口是否出现,未出现就等一会
                        pass
                    else:
                        break         
                except:
                    time.sleep(2)
                    pass
            s=browser.find_element_by_id("host_html") #找到窗口中需要搜索的信息位置
            time.sleep(2) #这里必须停一下,否则无法把搜到的信息加入列表
            html_text.append(str(s.text))
            browser.find_element_by_xpath('//div/span[@class="layui-layer-setwin"]/a').click() #点击窗口的叉叉退出
            try:
                WebDriverWait(browser,10).until(EC.staleness_of(browser.find_element_by_xpath('//div/span[@class="layui-layer-setwin"]/a')))#判断窗口是否已经退出,没退出就等一会
            except:
                pass
        #把整页爬完后换页,我的账号只能爬5页,所有设置成了5
        if(j!=4):
            browser.find_element_by_xpath('//div[@id="will_page"]/a[@class="next_page"]').click() #点击换页图标
            try:
                WebDriverWait(browser,10).until(EC.text_to_be_present_in_element(("class name" ,"current"),str(j+2))) #判断是否已经换页,没换就等会
            except:
                pass
    return html_text

 

#存储信息的列表
html_text=[]
#循环把app列表里面的内容全爬了
for i in range(len(app)):
    input_box=browser.find_element_by_id("q") #找到内容输入框
    input_box.clear() #清空
    input_box.send_keys("app=\""+app[i]+"\"") #搜索设备名
    browser.find_element_by_id("search_button").click() #点击旁边的搜索图标
    WebDriverWait(browser, 10).until(EC.presence_of_element_located(("class name", "left-total-item")))  #这里设置了一个等待,只有要求的class出现才可以进入下一步
    text_0=search() #搜索
    html_text.append(text_0) #把结果放入html_text
    
    
time.sleep(2)
#下面主要是把二维的html_text转换成一维,然后以csv格式存储
final=[]
for i in range(len(html_text)):
    for j in range(len(html_text[i])):
        final.append(html_text[i][j])
df = pd.DataFrame(final,columns=["text"])
df.to_csv("nonwatchdog.csv",index=False)

#关闭网页
browser.close()

 

### 使用 Selenium 爬取 NBA 网站数据 #### 安装依赖项 为了启动此项目,需安装 Python 3.x 和 Geckodriver(适用于 Firefox 浏览器)。此外,还需安装 `requirements.txt` 中列出的一些 Python 库[^3]。 ```bash pip install selenium pandas requests beautifulsoup4 ``` #### 初始化 WebDriver 创建一个新的 Python 文件并导入必要的模块: ```python from selenium import webdriver import time ``` 初始化 Web 驱动程序实例,并设置隐式等待时间以便加载 JavaScript 渲染的内容: ```python driver = webdriver.Firefox(executable_path='/path/to/geckodriver') driver.implicitly_wait(10) # seconds ``` #### 访问目标 URL 并抓取数据 访问 NBA 的官方网站或任何包含所需信息的具体页面。例如,要获取最新的比赛得分表单页: ```python url = 'https://www.nba.com/scores' driver.get(url) time.sleep(5) # 给予额外的时间让动态内容完全加载完毕 html_content = driver.page_source ``` #### 解析 HTML 内容 利用 BeautifulSoup 来解析返回的 HTML 文档,提取感兴趣的元素,比如表格中的行记录: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, "lxml") table_body = soup.find('tbody') rows = table_body.find_all('tr') for row in rows: columns = row.find_all('td') data_row = [ele.text.strip() for ele in columns] print(data_row) ``` #### 关闭浏览器会话 完成操作后记得关闭浏览器窗口以释放资源: ```python driver.quit() ``` 上述代码片段展示了如何配置和使用 Selenium 进行基本的数据采集工作流。对于更复杂的需求,则可能还需要考虑异常处理机制、登录验证流程等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值