python爬虫之 selenium + phantomjs 爬斗鱼所有直播间

废话不多说,上代码
import json
import time
from selenium import webdriver


class douYuSpider():
    def __init__(self):
        self.start_url = 'https://www.douyu.com/directory/all'
        self.driver = webdriver.PhantomJS()

    def get_content_list(self):
        li_list = self.driver.find_elements_by_xpath('//ul[@id="live-list-contentbox"]/li')
        content_list = []
        for li in li_list:
            content = {}
            content['title'] = li.find_element_by_xpath('./a[@class="play-list-link"]').get_attribute('title')
            content['img'] = li.find_element_by_xpath('./a[@class="play-list-link"]/span/img').get_attribute(
                'data-original')
            content['game_name'] = li.find_element_by_xpath('./a[@class="play-list-link"]/div/div/span').text
            content['anchor_name'] = li.find_element_by_xpath('./a/div/p/span[@class="dy-name ellipsis fl"]').text
            content['watch_num'] = li.find_element_by_xpath('./a/div/p/span[@class="dy-num fr"]').text
            print(content)
            content_list.append(content)

        next_url = self.driver.find_elements_by_xpath('//a[@class="shark-pager-next"]')
        next_url = next_url[0] if len(next_url) > 0 else None
        print('------当前页完成------')

        return content_list, next_url

    def save_content_list(self, content_list):
        with open('斗鱼.txt', 'a')as f:
            for content in content_list:
                f.write(json.dumps(content, ensure_ascii=False, indent=2))
                f.write('\n')
        print('保存完成')

    def run(self):
        self.driver.get(self.start_url)
        content_list, next_url = self.get_content_list()
        self.save_content_list(content_list)
        while next_url:
            next_url.click()
            time.sleep(5)
            content_list, next_url = self.get_content_list()
            self.save_content_list(content_list)
        self.driver.quit()


if __name__ == '__main__':
    douyu = douYuSpider()
    douyu.run()
期间碰到个小问题,selenium 爬取网页时,会报以下的错误:selenium.common.exceptions.StaleElementReferenceException: Message: {"errorMessage":"Element does not exist in cache, 即在cache中找不到元素,可能是在元素被找到之后页面变换了。 这就说明,当前页面发生跳转之后,存在cache中的与这个页面相关的元素也被清空了,我把timesleep的等待时间设置的长一点5s,就没有报错。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值