要从经过动态渲染的网页中爬取数据,需要使用Selenium库打开一个模拟浏览器访问网页,然后获取渲染后的网页源代码。
实战中通常和Requests库结合使用,实现优势互补。如果用Requests库能获取到需要的网页源代码,那么优先使用Requests库进行爬取;如果用Requests库获取不到,再使用Selenium库进行爬取。
首先查看谷歌浏览器的版本号。单击谷歌浏览器右上角的 ⋮ 按钮,在弹出的菜单中执行 帮助 -> 关于Google Chrome,在弹出的页面中查看所安装的谷歌浏览器的版本号。
接着下载安装包:
找到与自己谷歌浏览器最接近的的版本,下载对应当前操作系统的安装包。
注意:Chrome推送新版本更新要小心,因为一不小心点了升级,再运行之前写的程序,就会出现Chrome与chromedriver版本不一致的问题,导致程序无法正常运行。
最后,安装ChromeDriver:将下载好的文件解压缩,得到可执行文件“chromedriver.exe”,将其复制到Python安装路径下的“Scripts”文件夹中。建议把ChromeDriver安装到Python的安装路径下,从而让Python能更容易地调用ChromeDriver。
Python安装路径查询:在命令行窗口中输入where python后回车,即可看到Python的安装路径。
在命令行窗口中输入chromedriver后回车,没有报错就说明ChromeDriver安装成功了。
geckodriver下载地址:https://github.com/mozilla/geckodriver/releases/
安装geckodriver:将下载好的文件解压缩,得到可执行文件“geckodriver.exe”,将其复制到Python安装路径下的“Scripts”文件夹中。建议把geckodriver安装到Python的安装路径下,从而让Python能更容易地调用geckodriver。
运行以下代码,能够打开浏览器,就说明安装成功了: from selenium.webdriver import Chrome
browser = Chrome() url = "https://www.xinpianchang.com/a12867560" browser.get(url)
在上面验证安装的时候,我们发现Selenium打开谷歌浏览器运行完后,浏览器就自动关闭了,都没看清楚。
这时,需要进行浏览器选项设置,向浏览器添加一些实验性功能选项。
from selenium import webdriver # 打开自定义配置 options = webdriver.ChromeOptions() # 设置浏览器不会关闭 options.add_experimental_option("detach", True) # 禁用浏览器扩展 options.add_argument("--disable-extensions") # 禁用浏览器弹窗 options.add_argument("--disable-popup-blocking") # 设置浏览器UA options.add_argument( "--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" ) browser = webdriver.Chrome(options=options) browser.maximize_window() url = "https://www.xinpianchang.com/a12867560" browser.get(url)
from selenium import webdriver from selenium.webdriver.support import expected_conditions as ec # 该模块收集了一系列的场景判断方法 from selenium.webdriver.support.wait import WebDriverWait # 显示等待
options = webdriver.ChromeOptions()
options.add_experimental_option("detach", True) browser = webdriver.Chrome(options=options)
url = "https://www.xinpianchang.com/a12867560" browser.get(url) # 打开页面
url2 = "https://www.baidu.com/" browser.get(url2)
browser.back() # 后退 browser.forward() # 前进
element = browser.find_element("id", "kw") # 找到页面中的元素 element.send_keys("爬虫") # 向输入框发送值
element2 = browser.find_element("id", "su") element2.click() # 点击按钮
wait = WebDriverWait(browser, 30) # 最长等待时间为 30 秒
wait.until(ec.presence_of_element_located(("id", "content_left")))
content = browser.page_source # 获取页面内容
browser.close() # 关闭页面
from selenium import webdriver import json
options = webdriver.ChromeOptions()
options.add_experimental_option("detach", True) browser = webdriver.Chrome(options=options)
url = "https://www.baidu.com/" browser.get(url)
cookies = browser.get_cookies() cookies_str = json.dumps(cookies) # 序列化
with open("cookies.txt", "w", encoding="utf-8") as f: f.write(cookies_str)
with open("cookies.txt", "r", encoding="utf-8") as f: cookies_str = f.read()
cookies = json.loads(cookies_str)
for cookie in cookies: try: browser.add_cookie(cookie) except Exception as e: print(e)
browser.get(url)
本文作者:a
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!