一.一般情况可以直接使用requests模块配合bs4模块直接爬取数据
二.遇到网页源代码和网页元素审查不一样的情况,即有js动态加载的情况,我使用了selenium模块配合歌浏览器 headless(无头模式)来解决
中途遇到一些坑现在记录如下:
1.使用selenium模拟网页运行需要火狐浏览器或谷歌浏览器配合,所有先下载好要用的浏览器,然后需要下载一个chromedriver.exe(谷歌浏览器启动需要)https://sites.google.com/a/chromium.org/chromedriver/(我直接下载这个里的)
http://chromedriver.storage.googleapis.com/index.html (里面只有32位的,不知道为什么,不过下载后可以用selenium开启浏览器,也就没再深究。需要下载和谷歌浏览器对应的版本)
geckodriver.exe(火狐浏览器启动需要)
安装三大浏览器驱动driver
1.chromedriver 下载地址:https://code.google.com/p/chromedriver/downloads/list (可能需要墙,反正我没打开)
2.Firefox的驱动geckodriver 下载地址:https://github.com/mozilla/geckodriver/releases/
3.IE的驱动IEdriver 下载地址:http://www.nuget.org/packages/Selenium.WebDriver.IEDriver/
注意:下载解压后,将chromedriver.exe , geckodriver.exe , Iedriver.exe发到Python的安装目录,例如 D:\python 。 然后再将Python的安装目录添加到系统环境变量的Path下面。
然后打开Python IDLE分别输入以下代码来启动不同的浏览器
启动谷歌浏览器
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('http://www.baidu.com/')
启动火狐浏览器
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://www.baidu.com/')
启动IE浏览器
from selenium import webdriver
browser = webdriver.Ie()
browser.get('http://www.baidu.com/')
Python设置火狐浏览器谷歌浏览器 headless(无头模式)
firefox和chrome都有了无头模式,也就是没有界面的浏览器,在内存中执行。
firefox:
from selenium import webdriver
options = webdriver.FirefoxOptions()
options.add_argument('-headless')
browser = webdriver.Firefox(firefox_options=options)
browser.get('http://www.baidu.com/')
chrome:
Chrome_options = webdriver.ChromeOptions()
Chrome_options.add_argument('-headless')
drive = webdriver.Chrome(chrome_options=Chrome_options)
drive.get('http://www.baidu.com/')
设置好headless后运行,发现会报错
根据源码的提示发现使用chrome_options 时会将chrome_options 值传给options,然后在给一个警告信息,根据错误信息已经源码的注解了解到未来options会取代chrome_options,所以我们只需要chrome_options改成options即可
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(options=chrome_options)
browser.get('http://www.baidu.com')