Python 使用Selenium获取斗鱼直播主播数据

(一)抓取网页的三种形式

1.抓取静态网页数据,只需要遍历url就可获取各网页的数据。比如:
这里写图片描述

2.抓取动态网页数据就是获取json格式数据,因此只需要遍历json数据对应的url从而获取json数据。比如:
这里写图片描述
这里写图片描述
3.对于一些静态网页请求参数加密或请求参数过多,为了获取网页数据往往使用Selenium自动化测试工具获取网页源码,再解析网页获取数据。这样我们无需构造url请求参数就可获取网页数据。


(二)JS处理滚动条问题

1、滚动条回到顶部:
js=“var q=document.getElementById(‘id’).scrollTop=0”
driver.execute_script(js)
或者
js=“var q=document.documentElement.scrollTop=0”
driver.execute_script(js)
2、滚动条拉到底部:
js=“var q=document.getElementById(‘id’).scrollTop=10000”
driver.execute_script(js)
或者
js=“var q=document.documentElement.scrollTop=10000”
driver.execute_script(js)
3、滚动条拉到指定位置(具体元素):
target = driver.find_element_by_id(“id_keypair”)
driver.execute_script(“arguments[0].scrollIntoView();”, target)
4、通过模拟键盘DOWN(↓)来拖动:
driver.find_element_by_id(“id”).send_keys(Keys.DOWN)
5、scrollTo函数
–scrollHeight 获取对象的滚动高度。
–scrollLeft 设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离。
–scrollTop 设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离。
–scrollWidth 获取对象的滚动宽度。

(三)使用Selenium获取斗鱼直播所有主播的信息

代码如下:

import unittest
import time
from selenium import webdriver
from bs4 import BeautifulSoup
class douyuSelenium(unittest.TestCase):
    #1.创建浏览器驱动对象
    def setUp(self):
        self.driver = webdriver.Chrome("F:\Chrome\ChromeDriver\chromedriver")

    #2.具体的测试用例方法,一定要以test开头
    def testDouyu(self):
        self.driver.get('http://www.douyu.com/directory/all')
        time.sleep(5)
        while True:
            #3.指定xml解析
            soup = BeautifulSoup(self.driver.page_source, 'xml')

            #4返回当前页面所有房间标题列表 和 观众人数列表
            titles = soup.find_all('h3', {'class': 'ellipsis'})
            nums = soup.find_all('span', {'class': 'dy-num fr'})

            #5.使用zip()函数来可以把列表合并,并创建一个元组对的列表[(1,2), (3,4)]
            for num,title in zip(nums, titles):
                print(u"观众人数:" + num.get_text().strip(), u"\t房间标题: " + title.get_text().strip())
            #6.page_source.find()未找到内容则返回-1
            if self.driver.page_source.find('shark-pager-disable-next')!=-1:
                break
            #7.就模拟下一页点击,设置页面缓冲时间
            time.sleep(5)
            self.driver.find_element_by_class_name('shark-pager-next').click()

if __name__ == "__main__":
    unittest.main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值