jquery抓取网页内容(使用selenium爬取动态网页信息Pythonselenium自动控制 )
优采云 发布时间: 2022-04-04 23:29jquery抓取网页内容(使用selenium爬取动态网页信息Pythonselenium自动控制
)
使用selenium爬取动态网页信息
python selenium自动控制浏览器抓取网页数据,包括按钮点击、页面跳转、搜索框输入、页面值数据存储、mongodb自动id识别等。
首先介绍一下Python selenium——一个自动化测试工具,用来控制浏览器对网页的操作。当与爬虫中的 BeautifulSoup 结合使用时,它是无缝的。除了国外的一些异常验证页面,图片验证码我自己写了破解。图片验证码源码,成功率85%。
使用 conda 管家安装:
在cmd命令行输入“conda install selenium”进行安装
还需要安装 Google Chrome Drive 或 Firefox 插件
设置环境变量
通过selenium访问百度
from selenium import webdriver
#打开一个浏览器
browser = webdriver.Chrome()
#准备一个网址
url = 'http://www.baidu.com'
browser.get(url)
#获取元素
login = browser.find_elements_by_class_name('lb')[0]
print(login)
获取网易云音乐
from selenium import webdriver
#打开浏览器
brower = webdriver.Chrome()
url='https://music.163.com/#/discover/toplist'
brower.get(url)
#寻找logo文字
#logo = brower.find_elements_by_class_name('logo')[0]
#print(logo.text)
#一般情况下动态加载的内容都可以找到
#有一种情况就没有
#就是网页内存在网页框架iframe
#需要切换网页的层级
#语法:brower.switch_to.frame(iframe的id或者你提前获取这个对象,放入此处)
#方法一:id
#brower.switch_to.frame('g_iframe')
#方法二:name
#brower.switch_to.frame('contentFrame')
#方法三:提前用变量存iframe
iframe = brower.find_element_by_id('g_iframe')
brower.switch_to.frame(iframe)
#寻找大容器
toplist = brower.find_element_by_id('toplist')
#寻找tbody 通过标签名
tbody = toplist.find_elements_by_tag_name('tbody')[0]
#寻找所有tr
trs = tbody.find_elements_by_tag_name('tr')
dataList = []
for each in trs:
#排名
rank = each.find_elements_by_tag_name('td')[0].find_elements_by_class_name('num')[0].text
musicName = each.find_elements_by_tag_name('td')[1].find_elements_by_class_name('txt')[0].\
find_element_by_tag_name('b').get_attribute('title')
#print(musicName)
singer = each.find_elements_by_tag_name('td')[3].find_elements_by_class_name('text')[0].\
get_attribute('title')
#print(singer)
dataList.append([rank,musicName,singer])
#print(dataList)
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.title = '云音乐飙升榜'
ws.append(['排名','歌名','歌手'])
for data in dataList:
ws.append(data)
wb.save("云音乐飙升榜.xlsx")