抓取动态的网页内容主要有两种办法,一种是通过开发者工具找到动态内容的接口,然后分析接口的参数和返回值来爬取网站的数据。另外一种是通过模拟浏览器来抓取数据。python的Selenium库就可以通过代码来模拟浏览器抓取数据。
运行Selenium需要依赖于Python的selenium库,以及浏览器对应驱动器(WebDriver)。
pip install selenium
项目地址: https://pypi.org/project/selenium/
WebDriver可以简单的理解为浏览器插件,是可执行的程序。不同的浏览器对应的WebDriver是不同的,比如火狐浏览器的WebDriver是geckodriver,Windows环境下是geckodriver.exe文件;Chrome浏览器的WebDriver是Chromedriver,Windows环境下是chromedriver.exe文件。
Webdriver下载之后解压缩,将exe文件复制到python目录下(只要目录在path环境变量中就可以)
火狐的webdriver下载
https://github.com/mozilla/geckodriver/
google chrome 的webdriver下载(按浏览器版本下载对应的webdriver,如果Chrome的版本与chromedriver.exe的版本不匹配,那么selenium的python程序会运行失败的)
http://chromedriver.storage.googleapis.com/index.html
例子1:
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('http://www.baidu.com')
assert '百度一下' in browser.title
#elem = browser.find_element_by_name("wd")
elem = browser.find_element_by_xpath('//*[@id="kw"]')
elem.send_keys("selenium")
btn = browser.find_element_by_id("su")
btn.click()
#browser.quit()
例子2:
import unittest
from selenium import webdriver
class BaiduTest(unittest.TestCase):
def setUp(self):
self.browser = webdriver.Firefox()
self.browser.get("http://www.baidu.com")
#self.addCleanup(self.browser.quit)
def testTitle(self):
self.assertIn("百度一下", self.browser.title)
def testSearch(self):
#self.browser.get("http://www.baidu.com")
searchInput = self.browser.find_element_by_id("kw")
searchInput.send_keys("selenium")
searchBtn = self.browser.find_element_by_id("su")
searchBtn.click()
self.assertIn("selenium", self.browser.current_url)
if __name__ == '__main__':
unittest.main(verbosity=2)
其他资源:
https://www.seleniumhq.org/download/
http://ftp.mozilla.org/pub/firefox/releases/ 火狐版本
https://www.cnblogs.com/givemelove/p/8482361.html 火狐、谷歌软件及webdriver
本文内容到此结束,更多内容可关注公众号和个人微信号: