iframe实例_Python爬虫十二 Selenium实例

Python Selenium实例之自动填写调查问卷和获取网易云歌单信息

一、自动填写问卷

调查问卷网址

问卷星是一个使用率很高的问卷调查网站,在问卷星贴吧有很多调查问卷的链接。https://www.wjx.cn/jq/89038106.aspx

实例化一个浏览器对象,并访问目标网站
from selenium.webdriver import Chrome
import random # 后面随机选择答案
#没有添加无头参数
webdriver = Chrome(executable_path=r"E:\python学习\python爬虫\chromedriver.exe")
webdriver.get(url)
解析网页结构

736b4832fbcc2d4b562e373abea04544.png


根据网页html节点,使用xpath查找自己需要的信息。

# 将特殊问题的答案保存为列表,通过列表索引随机取值
subject_list=['人文科学类','社会科学类','自然科学类','工程技术类']
num = random.randint(1, 3)
#找到网页中文本为列表中值的label节点,再找同级的a节点,然后再点击
ele = webdriver.find_element_by_xpath(f"//label[text()='{subject_list[num]}']/preceding-sibling::a")
#选中
ele.click()

grade_list = ['大一','大二','大三','大四','硕士生','博士生']
num = random.randint(1, 6)
ele = webdriver.find_element_by_xpath(f"//label[text()='{grade_list[num]}']/preceding-sibling::a")
ele.click()


# 找到所有问题的ul节点(切掉前两个特殊的问题)
eles = webdriver.find_elements_by_xpath("//ul[@class='ulradiocheck']")[2:]

for ele in eles:
    num = random.randint(1,5)
    a_ele = ele.find_element_by_xpath("./li[{}]/a".format(num))
    a_ele.click()
    # 找到每个选项下的label节点,获取label节点的文本和属性
    label_ele = ele.find_element_by_xpath("./li[{}]/label".format(num))
    print(label_ele.text, label_ele.get_attribute("for"))
# 后面的多选,选项也超过了五个,我当单选处理了。
# 找到提交按钮,点击提交,下面三行先注释可以看到结果
# 提交数据
ele = webdriver.find_element_by_id("submit_button")
ele.click()
# 关闭网页
webdriver.close()

二、网易云歌单信息获取

实例化浏览器对象,并访问目标网页
from selenium.webdriver import Chrome

#  实例化一个浏览器对象
webdriver = Chrome(executable_path=r"E:\python学习\python爬虫\chromedriver.exe")

# 访问目标网页
webdriver.get("https://music.163.com/#/discover/playlist/")
输入想要获取的页数
pages = int(input("请输入要爬取的页数: "))
切换iframe

该网页里面有iframe标签,里面有嵌套一个网页。因此在提取信息前,需要切换iframe,可以传索引,也可以传iframe的id,只用切换一次,不需要每次for循环翻页都去切换。

webdriver.switch_to.frame('g_iframe')
获取信息
# 翻页有两种方法:1.找url的规律,修改url
#              2.模拟点击下一页(我们这里使用的)
for _ in range(pages):

    # 解析网页结构,找到页面中所有歌单的li节点列表
    nodes = webdriver.find_elements_by_xpath('//ul[@id="m-pl-container"]/li')
    print(len(nodes))

    for node in nodes:  # node是每个歌单的li节点
        song_name = node.find_element_by_xpath("./p[1]/a").text  # 找歌单名称
        author_name = node.find_element_by_xpath("./p[2]/a").get_attribute("title")  # 找作者名称
        print(song_name, author_name)

    #  找到下一页的a节点,模拟点击
    next_node = webdriver.find_element_by_link_text('下一页')
    next_node.click()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值