当前位置:   article > 正文

python 爬虫_python frame爬虫

python frame爬虫

Python 爬虫

可能用到的工具

  1. requests 发送请求 其基础为 urllib2 urllib3
  2. re 正则
  3. lxml xpath解析 from lxml import etree
  4. json jsonpath(不常用) from bs4 import BeautifulSoup (不常用)
  5. selenium 用于模拟浏览器 from selenium import webdriver
  6. 常用的抓包工具:
    1. 浏览器开发者工具 google浏览器 firebox 火狐浏览器
    2. Fiddler
    3. WireShark
    4. Chrlse --> 用于Mac

爬虫步骤

  1. 发送请求
  2. 获得响应
  3. 处理响应

发送请求并获得响应

  1. 发送请求之前要准备url地址 构造请求头 准备数据 以及IP池

    url要寻找规律

    请求头里注意 user-Agent referer cookie选项

    user-Agent: 是用来识别用户客户端形式:可以从fake_useragent 中的UserAgent获得

    cookie: 已经登录的身份识别

    referer:是发出请求的源地址

    数据:将数据以json格式传输

    IP代理池:是更换ip地址,防止同一ip多次请求被封

  2. 请求的方式分为get 和 post session会话

    get方式:requests.get(url , data=data, headers=header , proxies=proxy) 地址后需要拼接? 来携带参数

    post方式:requests.post(url , data=data, headers=header , proxies=proxy)

    session方式: session=requests.session() session.get() session.post()

    安全验证:默认情况是需要验证的,如果不验证,可以更改 verify=False

    import requsets
    #生成客户端信息
    from fake_useragent import UserAgent
    UA = UserAgent()
    
    url=''#请求地址
    data = {#数据
        'color': '16777215',
        'fontsize': '25',
        'csrf_token': 'ae6a792688d2deb595cf8e73d4b461bf',
        'csrf': 'ae6a792688d2deb595cf8e73d4b461bf'
    }
    #请求头
    header = {
        'Referer': 'https://accounts.douban.com/login',
        'User-Agent': UA.random ,#调用random方法,随机产生一个
        'Cookie': cookie值,
    }
    #IP代理
    proxy = {
        'http': '119.101.114.244:9999',
        'https': '119.101.114.244:9999'
    }
    #设置安全验证
    r = requests.get(url, verify=False)
    r.encoding=编码方式  #设置响应的编码方式
    print(r.text)  #  r.json()  r.content等
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    IP代理网站:
    免费:
    1. 站大爷
    2. 西刺网

    收费:
    1. 蘑菇代理
    2. 阿布云
    3. 快代理
    4. 代理云
    5. 豌豆代理

  3. 获得响应

    response=requests.get(url , data=data, headers=header , proxies=proxy)

    响应数据为二进制流,必须对响应结果进行处理

    response.encoding=‘gb2312’ 改变编码方式
    response.text进行文本处理
    response.json()进行json格式处理

    r.content 得到二进制 如图片,视频等二进制文件

处理响应

处理响应,主要是提取需要的数据

用到的工具有:正则 xpath css jquery 等,定位需要的信息所在的位置,将信息提取出来


  • 1
1. 正则
规则:

[ ] : 在中号里面的字符 随意匹配一个 或 [abc] a 或者 提取 b 或者 提取c
注意: 匹配一个字符 结果是一个的

[^abc] : 不取abc 非

[a-z] : 提取从a到z的字母 范围的写法
注意: 扩展的时候不要加空格

\d : 匹配数字 一个 \D : 不匹配数字

\s: 匹配空白符 等价写法 \S: 取非空白

\w: [a-zA-Z0-9_] 默认先匹配大写 \W: [ ^a-zA-Z0-9_

任意次 * 至少一次 + 最多一次 ?

{m} : 匹配m次
{n,m}: 匹配n次到m次 注意: 默认 贪婪匹配(尽量匹配最多)

{n,m}?: 非贪婪匹配(尽量匹配最少)
? 前面加上数量词 都是变成了非贪婪匹配
(.*?) 尽量短的匹配 分组() 捕获

边界: ^ 以什么开头 $ 结尾

\b : 匹配一个单词边界 边界没有宽度 常用来提取单词 \b要转义 \\b

​ | – > a|b 先匹配左侧 --> 如果匹配不了 -->再匹配右侧

用来分组的概念
1. 可能一个正则有许多括号 (asda(asdas)sd) 查看组的个数 从左到右依次数 ‘(’ 第一个括号是第一组 …
2. group() 取出第几组
1.> 0 全部取出匹配的结果
2.> 1 取出第一组
3.> 2 取出第二组

引用:
引用捕获到的东西
用法: \number
number就是捕获组的编号
例如: \1 引用第一组捕获到的值 PythonSpider
引用的就是捕获到的值

re模块

re模块的使用:
函数式的

  1. re.search(pattern ,string, flages)

  2. re.match(pattern ,string, flages)
    匹配字符串开头 并且只匹配一次

  3. re.findall(pattern ,string, flages) 在字符串中查找所有的结果 并且返回的结果是列表形式
    如果没有匹配,则返回一个空列表。

  4. finditer(): 和findall一样只是结果是迭代器

  5. split():分割字符串 去掉了匹配到的字符串 结果是列表形式
    maxsplit: 默认是 0 表示全部切割 1 代表切割一次 2 代表切割两次

  6. re.sub(pattern, repl, string, count=0, flags=0): 替换匹配到的字符串
    pattern: 正则 repl: 要替换的字符串

    string: 待替换的字符串

    count: 替换的次数 0 全部替换 1 替换一次 2 替换两次

    flages参数的使用:

    re.I --> 无视大小写 大小写都可以匹配

    re.S --> 使 . 能匹配换行符 .? 可以经常使用 (.?) 和 .*? 来提取数据

对象式的
object = re.compile(‘正则表达式规则’) —> 一般比较高效
object.search(string, flages)

2. Xpath
  1. 规则

    / : 代表从根节点开始(/bookstore) 或者是选择子(儿子)节点(book/)
    // : 从任意节点开始 或者是选择子孙节点 (book//)
    . : 当前节点
    … : 上一层节点
    @ : 选取属性
    text(): 选取标签中的值

    • : 通配符 选择所有

    [ ] : 限定xxx
    [@attrib] : 限定只选择 具有attrib属性的 //book[@cover] 选择book节点下的拥有cover属性的
    [@attrib=‘value’]: 选择具有属性attrib 的 并且 值等于value
    | : 选择左右两个值
    book[1]: 谓词(索引)

    //li[contains(@attrib,value)]: 从li标签中选择具有attrib属性的 并且属性的值包含vaule(模糊匹配) attrib=‘我是张三’ //li[contains(@attrib,‘我是’)]

    //li[text()=‘xxx’]: 选择li标签下的值等于xxx

    注意:
    //li[contains(@attrib,value)] (@attrib,value) 中间的 “,” 号不要加空格

  2. lxml库

    from lxml import etree
    
    1.etree.parse(...):
        1. 读取文件xml
        2. etree 是lxml里面的一个类 DOM
            element tree
        3. 直接写上文件名
    
    3.etree.tostring(...):
        1. 传入解析对象
        2. 返回字节流形式
    
    2.etree.HTML(...):
        1. 传入参数html
        2. 返回经过解析后的对象 --> 树搜索路径 X(ml)Path(路径) 供以后XPath的使用
        3. 自动补全残缺的html  --> <a>564654</a>  初始化
    
    4.XPath解析对象.xpath():
        写入xpath规则
        返回结果是列表
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
3. json
  1. json模块

    import json
    
    1. json.loads
            将json对象转化为Python对象
    2. json.dumps
            将Python对象转化为Json对象
        注意:
        dumps编码默认是Ascii  Python默认Unicode  所有编码转化为Unicode   ensure_ascii=False
    
    3. json.load
    
    4. json.dump
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

实例

猫眼封装
import requests
from lxml import etree

class MaoYanSpider(object):
    # 获取响应
    def getOnePage(self, url):
        '''获取一页的响应的函数'''
        response = requests.get(url)
        return response.text

    # 解析响应 --> 结果
    def parseOnePage(self, text):

        # 初始化解析
        html = etree.HTML(text)
        # 里面有所有的数据 先选择上一层  这一层里面包含所有数据 然后循环遍历
        data = html.xpath('//dl[@class="board-wrapper"]')
        # 遍历提取所有的元素
        for dat in data:
            print(dat)
            # 继续选取
            # 标题
            title = dat.xpath('.//div//a/text()')
            # 主演
            star = dat.xpath('.//p[@class="star"]/text()')
            # 时间
            releasetime = dat.xpath('//p[@class="releasetime"]/text()')

            for tit, sta, rel in zip(title, star, releasetime):
                # 在函数里面遇到return就终止
                # 生成器
                yield {
                    '电影名字': tit,
                    '主演': sta.strip(),
                    '上映时间': rel
                }

    @staticmethod
    def save2File(data):
        with open('maoyan66.txt', 'a', encoding='utf-8') as fp:
            fp.write(data+'\n')

    # @classmethod
    # def save2File(cls, data):
    #     with open('maoyan66.txt', 'a', encoding='utf-8') as fp:
    #         fp.write(data+'\n')

def main():
    for page in range(10):
        # 一页网址
        url = f'https://maoyan.com/board/4?offset={page*10}'
        # 调用
        r = maoyanspider.getOnePage(url)
        # 解析数据 返回生成器
        result = maoyanspider.parseOnePage(r)
        for res in result:
            # with open('maoyan.txt','a',encoding='utf-8') as fp:
            #     # 打印到文件
            #     print(str(res), file=fp)
            MaoYanSpider.save2File(str(res))

if __name__ == "__main__":
    maoyanspider = MaoYanSpider()
    main()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64

模拟浏览器

1. selenium

  1. Selenium介绍:
    1. 自动化测试工具
    2. 类似按键精灵 反复的执行我们编写的命令 --> QQ群发器
    3. 可以像人一样访问网站 在浏览器里面

    工作原理:
    Python–>Selenium–>浏览器

    配置流程:
    1. 浏览器安装 注意版本
    2. 驱动下载安装 注意版本
    3. 安装Selenium pip install selenium
    不要取文件名取Selenium

  2. selenium包

    from selenium import  webdriver
    
    # 初始化 打开火狐浏览器
    # driver = webdriver.Firefox()
    # 初始化 打开谷歌浏览器
    driver = webdriver.Firefox()
    # 打开百度首页
    url = 'https://www.taobao.com/'
    # 打开 get 就类似与在浏览器地址栏里面放入网址
    driver.get(url)
    # 退出浏览器
    driver.quit()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    方法(共提供8中方法):

    1. find_element_by_xpath() 通过XPath找到元素

    ​ 调用:
    driver 是 实例化后的对象
    driver.find_element_by_xpath()

    1. find_element_by_xpath --> 只是选择元素  具体的信息要使用方法来提取     这个方法只提取一个元素
    2. find_elements_by_xpath         这个方法只提取多个元素
    3. find_elements_by_xpath  有自己的属性  .text 选取文本  get_attribute()选择属性
    
    from selenium.webdriver.common.by import By
    
    class By(object):
        """
        Set of supported locator strategies.
        """
        ID = "id"
        XPATH = "xpath"
        LINK_TEXT = "link text"
        PARTIAL_LINK_TEXT = "partial link text"
        NAME = "name"
        TAG_NAME = "tag name"
        CLASS_NAME = "class name"
        CSS_SELECTOR = "css selector"
    可以看出共有8中方法可以选择
    案例查看等待中的         显式等待案例
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

iframe框

iframe:
定义: 就是在一个html页面中有了另一个页面 子页面 iframe作为标签出现

定位到框内:
    switch_to.frame(value) --> 切换进框内
    vaule:
        1. 用索引 第几个框 从0开始   0 1 2 3 ...
        2. xpath元素定位
        3. id iframe ....
:Usage:
    driver.switch_to.frame('frame_name')
    driver.switch_to.frame(1)
    driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
from selenium import webdriver

# 网易云网址
url = 'https://music.163.com/#/song?id=31108473'
# 初始化浏览器
driver = webdriver.Chrome()
# 打开网站
driver.get(url)
# 切入框内
driver.switch_to.frame(0)
# 选择元素
result = driver.find_element_by_xpath('/html/body/div[3]/div[1]/div/div/div[2]/div/div[2]/div[2]/div[1]/div[2]/div[1]/div')

# 打印信息
print(result.text)

# 退出
#driver.quit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

模拟点击,输入文本内容

模拟登陆豆瓣网

import time
from selenium import webdriver

# 网址
url = 'https://accounts.douban.com/login'

# 初始化浏览器
driver = webdriver.Firefox()
# 打开网址
driver.get(url)

# 定位账号框
zhanghao = driver.find_element_by_xpath('//*[@id="email"]')
# 输入账号
zhanghao.send_keys('1960958490@qq.com')

time.sleep(2)

# 账号密码
mima = driver.find_element_by_xpath('//*[@id="password"]')
# 输入密码
mima.send_keys('Python@314159')

time.sleep(2)

# 自动登录
zidong = driver.find_element_by_xpath('//*[@id="remember"]')
zidong.click()

time.sleep(2)

# 点击登录
denglu = driver.find_element_by_xpath('//input[@class="btn-submit"]')
# 点击
denglu.click()

time.sleep(5)

driver.quit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

鼠标滑动

'''
拖动鼠标:
    ActionChains:
        ActionChains() --> 直接传入driver --> ActionChains(driver) 实例化
        perform --> 执行动作
        drag_and_drop(source, target)  source拖动的元素  target元素被放置的位置
'''
import time
from selenium import webdriver
from selenium.webdriver import ActionChains

# 网址
url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'

# 初始化
driver = webdriver.Firefox()
# 打开网站
driver.get(url)

# 切入框内
driver.switch_to.frame(0)

# 找到可以拖拽的元素
drag = driver.find_element_by_xpath('//*[@id="draggable"]')
# 需要放置的位置的元素
drop = driver.find_element_by_xpath('//*[@id="droppable"]')

# 实例化
action = ActionChains(driver)
# 定义动作 但是不执行 没有执行
action.drag_and_drop(drag, drop)
# 执行
action.perform()

time.sleep(5)

driver.quit()
'''
注意:
    perform才是真正的执行  可以在perform之前定义多个动作 最后一起执行
    注意切入框内 switch_to.frame(0)
'''
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

选择下拉框

'''
下拉框:
    Select(element) element是下拉框的元素
    选择的方法:
        1. select_by_value(value)  value="天津市"
        2. select_by_index(1)  通过索引 1 2 3 4 5 6
        3. select_by_visible_text(text) 通过可见的文本
'''
import time
from selenium import webdriver
from selenium.webdriver.support.select import Select

url = 'http://www.jq22.com/demo/shengshiliandong/'

# 初始化浏览器
driver = webdriver.Firefox()
# 打开
driver.get(url)

# 寻找可以选择的元素 并实例化Select

elememt = driver.find_element_by_xpath('//*[@id="s_province"]')

# 实例化Select
select = Select(elememt)
time.sleep(2)
# 选择具体的值
select.select_by_index(5)
time.sleep(2)
select.select_by_value('河南省')
time.sleep(2)
select.select_by_visible_text('四川省')

driver.quit()
'''
index 索引从 0 开始
value是option标签的一个属性值,并不是显示在下拉框中的值
visible_text是在option标签文本的值,是显示在下拉框的值
'''
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

执行JS代码

'''
执行JS代码:
    JS代码需要我们写  Lua脚本
    常见的js代码: window.open(url) --> 用浏览器打开url
                window.scrollBy(0, 1000) 拖动滑动条
    Selenium怎么执行:
        .execute_script(js代码)
'''
import time
from selenium import webdriver

js = "window.open('https://www.baidu.com')"

driver = webdriver.Firefox()
driver.get('https://www.taobao.com/')
# 执行js代码 打开百度首页
driver.execute_script(js)
time.sleep(2) # 强制暂停
driver.quit()
'''
close: 关闭当前页面
quit: 整个退出
'''
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

执行下拉滑动条

'''
执行下拉滚动条:
    往往用于点击事件  下拉以后才能点击的
'''
'''
下拉网易云音乐:     注意切入框内
'''
from selenium import webdriver

url = 'https://music.163.com/#/song?id=254574'

driver = webdriver.Firefox()

driver.get(url)

# 切入框内
driver.switch_to.frame(0)

# 执行js代码 下拉滚动条
js = 'window.scrollBy(0, 8000)'
# 执行js
driver.execute_script(js)
'''
注意:
    对于含有iframe的框也需要先切换进入框内才可以下拉。
'''
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

等待

为什么需要等待:
有时候加载比较慢 我们想要的元素已经出现了 但是还要等待其他元素的加载
有些元素没有加载出来 我们要等待它加载出来

隐式等待:
等待整个页面 隐式等待就是针对页面的

显式等待:
等待某个元素加载出来 针对元素的

'''
隐式等待:
    用法:implicitly_wait(s) s 是秒
        在固定的时间页面还有加载出来就不再等待       
'''
import time
from selenium import webdriver

url = 'https://www.receivesmsonline.net/'
driver = webdriver.Firefox()
# 等待
driver.implicitly_wait(10)
# 对这个没有限制
driver.get(url)

# 选择元素
try:
    startTime = time.time() # 计算时间戳
    print('开始进入等待时间---->>', startTime)
    # 肯定出错 程序一致在这个地方等待 10 秒  一致等到你找到 或者 等到规定的时间 在规定的时间没找到 就报错
    driver.find_element_by_xpath('adasdafgaghs')

except:
    endTime = time.time()
    print('等待了多少秒---->>', endTime-startTime)

'''
注意:'
    implicitly_wait 是全局的 只需要设置一次即可
'''
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
'''
显式等待指定某个条件,然后设置最长等待时间
WebDriverWait:
    WebDriverWait(driver, timeout) 实例化的driver  timeout等待的时间
until:
    直到xx条件符合为止
    until(条件)
条件:
    presence_of_element_located: 当前的元素被加载进来了
    presence_of_element_located是一个类 初始化要写定位的元素  一般是元组格式: (By.ID, 'vaule')
'''
import time
# 导入模块
from selenium import webdriver
# 导入等待的显式等待的类
from selenium.webdriver.support.ui import WebDriverWait  # WebDriverWait(driver)
# 导入判断元素的条件
from selenium.webdriver.support import expected_conditions as EC
# 导入选择元素的方法
from selenium.webdriver.common.by import By

url = 'https://www.receivesmsonline.net/'
driver = webdriver.Firefox()
driver.get(url)

try:
    startTime = time.time() # 计算时间戳
    print('开始进入等待时间---->>', startTime)

    wait = WebDriverWait(driver, 5)
    # 一直去寻找(By.ID, 'asdhakhkfl')被加载进来 直到时间耗尽  如果提前找到 就提前返回
    element = wait.until(EC.presence_of_element_located((By.ID, 'asdhakhkfl')))

except:
    endTime = time.time()
    print('等待了多少秒---->>', endTime - startTime)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

案例:网易云音乐

import time
from selenium import webdriver

class YunSpider(object):
    def __init__(self, url):
        # 网址
        self.url = url
        # 初始化浏览器
        self.driver = webdriver.Firefox()

    def getContent(self):
        # 打开网址
        self.driver.get(self.url)
        # 切入框内
        self.driver.switch_to.frame(0)

        for n in range(5):
            # 下拉混动条
            js = 'window.scrollBy(0, 8000)'
            self.driver.execute_script(js)

            time.sleep(1)
            # 选元素
            elememts = self.driver.find_elements_by_xpath('//div[contains(@class,"cmmts")]/div')
            # 循环遍历
            for text in elememts:
                result = text.find_element_by_xpath('.//div[contains(@class,"cnt f-brk")]').text
                print(result)
            # 翻页
            self.driver.find_element_by_partial_link_text('下一').click()
            time.sleep(1)  # 暂停1s

    @staticmethod
    def save2File(data):
        with open('Yun.txt', 'a', encoding='utf-8') as fp:
            fp.write(data+'\n') # print

    # 在对象销毁的时候自动执行这个魔术方法 引用计数为0
    def __del__(self):
        # 退出
        self.driver.quit()

if __name__ == '__main__':
    url = 'https://music.163.com/#/song?id=574566207'
    yunspider = YunSpider(url)
    yunspider.getContent()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

直接读取浏览器的配置文件

可以直接登录,像用户正常登录一样,

# coding = utf-8
from selenium import webdriver

# 设置配置文件路径  每个浏览器都不一样
profile_path = r'C:\Users\Administrator\AppData\Roaming\Mozilla\Firefox\Profiles\guzr7wpi.default'
# 加载配置数据
profile = webdriver.FirefoxProfile(profile_path)
# 启动浏览器配置
driver = webdriver.Firefox(firefox_profile=profile)
driver.get('https://taobao.com')
# driver.quit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/1006847
推荐阅读
相关标签
  

闽ICP备14008679号