问题在收集网络数据(爬虫)的时候,你可能会遇到这样的情况:要爬取的网站是一个动态网站。例如,在Web界面中,如果使用鼠标悬停、点击某处等,就可以“调出”附加内容(如图1所示,弹出窗口包含文字和图像信息)。HTML源代码由隐藏变为可见,但网页的URL没有改变。如果要收集这些“隐藏信息”,用于抓取静态网页的请求将无法如愿以偿。这时候可以利用selenium来模拟用户使用浏览器获取“隐藏信息”的操作。图1:在知乎首页点击“私信”,弹出一个包含文字和图片信息的弹窗。方案1.1短信功能:点击网页某处后出现弹窗,可以在线获取弹窗中的文字信息下载selenium的Firefox浏览器驱动文件geckodriver.exe,存放在python项目的路径。下载地址:Firefox浏览器驱动文件导入本例中需要的包和模块:注意:对于pyautogui,直接在cmd中输入“pipinstallpyautogui”可能会安装失败。可以从PyAutoGUI官网下载安装程序,然后在cmd中进入文件所在目录,执行“pythonsetup.pyinstall”即可安装成功。importpandasaspdfromseleniumimportwebdriverimportos,time,randomfromselenium.webdriver.common.action_chainsimportActionChainsimportpyautogui使用selenium中的webdriver模块打开火狐浏览器,进入网页。此时会自动弹出浏览器界面,可以自动操作也可以手动操作。driver=webdriver.Firefox()#驱动打开火狐浏览器url='请输入爬取网站的网址'driver.get(url)#驱动进入网页time.sleep(3)#设置爬虫时间interval:IPprotectionwarning:如果网页需要输入验证码登录账号,需要手动操作,然后再运行后续代码。使用pandas创建一个dataframe来保存爬取的信息。df=pd.DataFrame(columns=[''])#请在columns参数后输入列名,获取弹窗中的文本信息:#请添加额外的循环代码,自动获取数据:xpath='xpath'xpath_info='弹窗显示的文字信息的xpath'xpath_close='弹窗关闭按钮的xpath'try:driver.find_element_by_xpath(xpath).click()#Driver点击按钮text=driver.find_element_by_xpath(xpath_info).text#获取数据driver.find_element_by_xpath(xpath_close).click()#driveclosebuttontime.sleep(random.random()*3)#IPprotectionexceptExceptionase:print(repr(e))driver.quit()#关闭所有浏览器窗口输出表数据:df.to_excel('文件存储位置'+os.sep+'文件名.xlsx',index=False)#数据输出1.2图片信息功能:弹窗中有图片信息,需要右键点击保存到本地才能打开浏览器和网页,ma输入验证码,进行账号登录等操作同上。我不会在这里重复它们。右击图片保存到本地默认存储位置:警告:请运行以下循环,快速切换到驱动打开的Firefox浏览器界面(保持浏览器界面为当前窗口)!否则图片无法保存!xpath='图片的xpath'name='图片名称'#请添加额外的循环代码自动获取数据:try:context_click=driver.find_element_by_xpath(xpath)time.sleep(2)ActionChains(driver).context_click(context_click).perform()#实现点击鼠标右键time.sleep(1)pyautogui.typewrite(['v'])#点击V保存time.sleep(1)pyautogui.typewrite(name)#重命名time.sleep(1)pyautogui.typewrite(['enter'])#确保保存时间。sleep(1)pyautogui.typewrite(['enter'])pyautogui.typewrite(['enter'])#电脑有bug,hitenter一次有时不能保存,所以双击3次time.sleep(random.random()*3)#IP保护exceptExceptionase:print(repr(e))讨论本文代码没有涉及反爬虫问题。在爬取某些网站时,可能需要采取反爬虫措施。本文代码只解决了“在某处点击鼠标,出现弹窗,需要获取其中的信息”的问题。动态网页还有其他形式,比如滚动产生新的数据(信息流)等,可以参考selenium的其他用法。参考SeleniumPython教程Selenium入门(自动右键保存图片到本机)pyautogui安装失败解决办法注:转载请注明出处
