Python:利用 selenium 库抓取动态网页示例

前言

在抓取常规的静态网页时,咱们直接请求对应的 url 就能够获取到完整的 HTML 页面,可是对于动态页面,网页显示的内容每每是经过 ajax 动态去生成的,因此若是是用 urllib.request 直接获取页面的 HTML 时,就获取不到咱们所想用的内容,这时咱们就能够利用 selenium 库就能够得到咱们所须要的内容了。html

需安装的三方库

  • BeautifulSoup4
  • selenium
  • lxml

示例代码

示例说明:获取德邦官网设立了网点的市区名称前端

import urllib.request
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("--headless") #设置该参数使在获取网页时不打开浏览器

driver = webdriver.Chrome(chrome_options=chrome_options, executable_path="./chromedriver")
driver.get("https://www.deppon.com/deptlist/")
html = driver.page_source
driver.close()
soup = BeautifulSoup(html, 'lxml')
items = soup.select('div[class~="listA_Z"] a')
for item in items:
    print(item.string)

碰到的小问题

  1. 用 "pip install selenium" 安装 selenium 库时失败。能够利用下面的命令来安装"pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org selenium"。
  2. 在使用时 webdriver.Chrome()时出现的问题,在网上看到的文章用的是火狐浏览器,他们直接使用 webdriver.Firefox()就能够了,而我是用谷歌浏览器,我觉得用谷歌浏览器和用火狐浏览器同样的,可是在运行时出错了,后来再网上找了一下,是要在 selenium 官网下载Chrom Driver,而后在使用 webdriver.chorme()函数时,须要传 executable_path 参数,该参数的值就是在 selenium 官网下载的 Chrome Driver.exe 文件所在的路径。示例中我是把chromedriver.exe放在根目录,因此代码里我用的是相对路径( executable_path="./chromedriver")。

推荐

Chrom/firefox 浏览器插件:Katalon Recorder,Katalon Recorder是一个前端自动化测试插件,它能够用来记录你在网页上的全部操做,最神奇的是它还能够把记录导出为各类代码,这其中就包含了Python2的代码。有时借用它,甚至能够不用去分析HTML的结构就能够轻松地让咱们获取取得所须要的数据了,这对于那种HTML结构凌乱的网页仍是颇有帮助的。python

相关文章
相关标签/搜索