通过chrome浏览器直接打开目标网站,然后直接抓取里面的前端代码,可以让我们不必分析、破解目标网站的接口加密规则,因为对于非目标网站的内部人员来说,这个工作可没有那么简单。
首先要了解的是,WebDriver是一个开源工具,用于跨多个浏览器自动测试Web应用程序,它提供了导航到网页、用户输入、JavaScript执行等功能。
Python的Selenium库是WebDriver的Python语言实现,用于浏览器交互的自动化。使用WebDriver进行自动化操作比较麻烦的地方是,使用什么浏览器就需要下载相应的driver文件,即浏览器驱动:
- Chrome驱动(Google):http://chromedriver.chromium.org
- Chrome驱动(国内镜像):http://npm.taobao.org/mirrors/chromedriver/
- Firefox驱动:https://github.com/mozilla/geckodriver/releases/
下面的内容使用的是Chrome驱动,Chrome驱动与Chrome浏览器有对应关系,具体映射关系可以在Chrome驱动目录下查看,但是最好的方法是更新Chrome至最新版本,再下载最新的Chrome驱动。
接下来我们在任意目录下创建一个tools123
的文件夹,并把刚才下载的Chrome驱动放到这里来,再创建一个tools123.py
的文件,在该文件下输入下面的代码:
from selenium import webdriver
from os import getcwd,sep
# 当前进程的工作目录
cwd = getcwd()
# 设置chrome驱动器
driver = webdriver.Chrome(f'{cwd}{sep}chromedriver')
# 设置超时时间
driver.set_page_load_timeout(13)
# 推出驱动并关闭所关联的所有窗口
driver.quit()
执行上面代码后,如果正常的话,电脑会打开一个Chrome浏览器窗口,然后又马上关闭了。下面我们可以试一下访问百度新闻并搜索关键词:
…………
from time import sleep
…………
…………
…………
# 访问
driver.get('http://news.baidu.com/')
# 等待几秒
sleep(3)
# 清空文本框的内容
driver.find_element_by_name('word').clear()
# 输入文本内容
driver.find_element_by_name('word').send_keys('百度')
# 点击按钮
driver.find_element_by_id("s_btn_wr").click()
# 等待几秒
sleep(3)
# 推出驱动并关闭所关联的所有窗口
driver.quit()
再执行一下代码,电脑打开Chrome浏览器窗口后,会访问百度新闻,然后输入“百度”,点击搜索按钮。接下来我们就可以爬页面的内容,不过我们还需要借助Python的Beautiful Soup库,它可以轻松从网页上抓取信息,提供用于迭代、搜索和修改解析树的功能。
下面我们就可以开始获取今天有关“百度”的热点新闻了:
…………
from bs4 import BeautifulSoup
…………
…………
…………
# 等待几秒
sleep(3)
# 获得网页内容
summaryPage = driver.page_source
# 解析HTML内容
summaryObj = BeautifulSoup(summaryPage, 'html.parser')
# 通过Class获取内容
summaryObjContent = summaryObj.find_all(attrs={'class':'c-title'})
for i in range(len(summaryObjContent)):
# 查找出一个a标签
aObj = summaryObjContent[i].find('a')
# 查a标签的href值
href = aObj['href']
# 标签<a>中含有其他标签,用k.get_text()
# strip()方法,去除字符串开头或者结尾的空格
title = aObj.get_text().strip()
print(title+'\n'+href+'\n')
# 推出驱动并关闭所关联的所有窗口
driver.quit()
最后上一个效果图哈!
效果图
网友评论