Python-爬虫-针对有frame框架的页面

摘要:
有些页面将使用框架框架。使用Selenium+PantomJS后,iframe框架中的网页内容将不会被加载。iframe框架相当于在页面中加载另一个页面。您需要使用Selenium的switch_to.frame()方法。Id=101988&limit=120&offset=0页面中的相册信息,如图片、网站和相册名称。Id=101988&限制=120&偏移=0本身。basePath=os。路径dirnamedefmakedir:path=os。路径joinisExist=os。路径存在通知存在:os。makedirprintelse:print#切换到os。chdirreturnpathconnection:driver=webdriver。PhantomJS()驱动程序。getprintreturndriverdeffgetFileNames:pic_names=os。listdirreturnpic_namesdefgetInfo:driver=self.connectdriver。switch_to.framepath=自身。makedirpic_names=self.getFileNamesimgs=驱动程序。find_elements_by_xpathtitles=驱动程序。find_elements_by_xpathdates=驱动程序。find_elements_by_xpathcount=0formginimings:album-name=titles[count]。textcount+=1照片_名称=白蛋白_名称.替换+'。jpg'printifphoto_nameinpicNames:print('图片已下载。

有的页面会使用frame 框架,使用Selenium + PhantomJS 后并不会加载iframe 框架中的网页内容。iframe 框架相当于在页面中又加载了一个页面,需要使用Selenium 的 switch_to.frame() 方法加载(官网给的方法是switch_to_frame(),但是IDE提醒使用前面的方法替代该方法)。

比如:

        driver.switch_to.frame('g_iframe')

        html = driver.page_source

然后结合BeautifulSoup获取网页中信息。

这次我们爬取http://music.163.com/#/artist/album?id=101988&limit=120&offset=0页面中的专辑信息,比如,图片、网址及专辑名字。

Python-爬虫-针对有frame框架的页面第1张Python-爬虫-针对有frame框架的页面第2张
"""
http://music.163.com/#/artist/album?id=101988&limit=120&offset=0
爬取上述网址中的专辑信息
"""

from selenium import webdriver
from urllib.request import urlretrieve
import os
from bs4 import BeautifulSoup

class DownloadInfo():

    def __init__(self):
        self.url = 'http://music.163.com/#/artist/album?id=101988&limit=120&offset=0'
        self.basePath = os.path.dirname(__file__)

    def makedir(self, name):
        path = os.path.join(self.basePath, name)
        isExist = os.path.exists(path)
        if not isExist:
            os.makedirs(path)
            print('The file is created now.')
        else:
            print('The file existed.')
        #切换到该目录下
        os.chdir(path)
        return path

    def connect(self, url):
        driver = webdriver.PhantomJS()
        driver.get(url)
        print('success')
        return driver

    def getFileNames(self, path):
        pic_names = os.listdir(path)
        return pic_names

    def getInfo(self):
        driver = self.connect(self.url)
        driver.switch_to.frame('g_iframe')
        path = self.makedir('Infos')
        pic_names = self.getFileNames(path)
        imgs = driver.find_elements_by_xpath("//div[@class='u-cover u-cover-alb3']/img")
        titles = driver.find_elements_by_xpath("//li/p[@class='dec dec-1 f-thide2 f-pre']/a")
        dates = driver.find_elements_by_xpath("//span[@class='s-fc3']")
        count = 0
        for img in imgs:
            album_name = titles[count].text
            count += 1
            photo_name = album_name.replace('/', '') + '.jpg'
            print(photo_name)
            if photo_name in pic_names:
                print('图片已下载。')
            else:
                urlretrieve(img.get_attribute('src'), photo_name)
        for title in titles:
            print(title.text)
        for date in dates:
            print(date.text)


"""
    def getInfo(self):
        driver = self.connect(self.url)
        driver.switch_to.frame('g_iframe')
        html = driver.page_source
        path = self.makedir('Infos')
        pic_names  = self.getFileNames(path)
        all_li = BeautifulSoup(html, 'lxml').find(id='m-song-module').find_all('li')
        for li in all_li:
            album_img = li.find('img')['src']
            album_name = li.find('p', class_='dec')['title']
            album_date = li.find('span', class_='s-fc3').get_text()
            print(album_img)
            print(album_name)
            print(album_date)
            photo_name = album_name.replace('/', '') + '.jpg'
            if photo_name in pic_names:
                print('图片已下载。')
            else:
                urlretrieve(album_img, photo_name)
"""



if __name__ == '__main__':
    obj = DownloadInfo()
    obj.getInfo()
View Code

免责声明:文章转载自《Python-爬虫-针对有frame框架的页面》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java设计模式7:适配器模式CentOS7+Mono5.2.0.224 +Jexus5.8.3.0 布署 Asp.Net MVC (vs2017)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

用Python做股市数据分析(一)

本文由伯乐在线-小米云豆粥翻译。未经许可,禁止转载!英文出处:Curtis Miller。欢迎加入翻译组。 这篇博文是用Python分析股市数据系列两部中的第一部,内容基于我犹他大学 数学3900 (数据科学)的课程。在这些博文中,我会讨论一些基础知识。比如如何用pandas从雅虎财经获得数据, 可视化股市数据,平局数指标的定义,设计移动平均交汇点分析移动...

RF环境搭建

前言:自动化运用 数据驱动开发:用户,上下文,场景,数据,验证 自动化用例组织:领域,史诗故事,拓扑和测试用例 用例规划: 三个步骤:确定业务领域,规划用例环境拓扑,规划测试套和测试用例 Robot提供了一个图形化,可编辑的环境。其基础还是python的SSH等库,robot起到一个综合处理的过程。 如果没有robot,那么python写测试用例也可以这样...

python魔法方法、构造函数、序列与映射、迭代器、生成器

在Python中,所有以__双下划线包起来的方法,都统称为"魔术方法"。比如我们接触最多的__init__,魔法方法也就是具有特殊功能的方法。 构造函数 构造函数不同于普通方法,将在对象创建后自动调用它们。也就是在对象创建完成后,自动会调用__init__方法来初始化。 创建一个构造方法 构造方法传参 >>> classFooBar...

python读取pdf文件

pdfplumber简介 Pdfplumber是一个可以处理pdf格式信息的库。可以查找关于每个文本字符、矩阵、和行的详细信息,也可以对表格进行提取并进行可视化调试。 文档参考https://github.com/jsvine/pdfplumber pdfplumber安装 安装直接采用pip即可。命令行中输入 pip install pdfplumber...

python h5py 读取hdf 数据

#Env dependent extension packages #pip install h5py -i https://pypi.tuna.tsinghua.edu.cn/simple #pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple #pip install pandus...

Python入门练手100例

【Python练习实例001】   有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少? 【Python练习实例002】   企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于或等于20万元时,10万的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万元(含)之间...