A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Charlotter 初级黑马   /  2018-10-16 17:53  /  1382 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


[tr][td]使用selenium爬取动态网页信息

Python selenium自动控制浏览器对网页的数据进行抓取,其中包含按钮点击、跳转页面、搜索框的输入、页面的价值数据存储、mongodb自动id标识等等等。
首先介绍一下 Python selenium —自动化测试工具,用来控制浏览器来对网页的操作,在爬虫中与BeautifulSoup结合那就是天衣无缝,除去国外的一些变态的验证网页,对于图片验证码我有自己写的破解图片验证码的源代码,成功率在85%。

使用conda管家安装:
在cmd命令行输入“conda install selenium”进行安装
还需要安装谷歌浏览器插件Google Chrome Drive或者火狐浏览器插件
设置环境变量

通过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)
1
2
3
4
5
6
7
8
9
10
获取网易云音乐


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")
---------------------
【转载】
作者:FlenceXu
原文:https://blog.csdn.net/qq_4024336 ... 450?utm_source=copy

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马