python爬虫之爬取捞月狗直播信息

   诶,本人一个大三真皮沙发男。最近迷上了斗鱼大司马,这个就很有意思,你知道吧。

就想写一个python爬虫来搞一波事情,觉得捞月狗这个平台还不错,就花了点时间写了一个用pyqt5做UI界面的爬虫。顿时就觉得爬虫高大上了不少,诶,你懂我意思的。原来写爬虫爬过淘宝网,赶集网,58同城,还在妹子图网站开过车,就很完美。开车的话就不能说的太多,很多人会晕车的,欸,你懂我意思的。

本次爬虫基于python3.6+Beautifulsoup+pyqt5。基本上python3的版本都可以直接复制使用的。废话扯得多了,直接就上干货了。

python爬虫之爬取捞月狗直播信息_第1张图片

上图就是本次爬虫要爬取的页面了,我们要做的就是爬取每个矩形框里面的数据,包括标题(titles),在线人数(nums),主播(hosts),以及直播平台(tvs)。将这四个数据分别抓取下来放在python的数据结构词典(dict)里面。具体代码如下:

def get_one_page(url):
    wb_data = requests.get(url)
    wb_data.encoding = wb_data.apparent_encoding
    if wb_data.status_code == 200:
        return wb_data.text
    else:
        return None


def parse_one_page(html):
    soup = BeautifulSoup(html, 'lxml')

    titles = soup.select('div.mode-box.classfiy-box div.video-pic-list ul li a div.txt h6')
    nums = soup.select('div.mode-box.classfiy-box div.video-pic-list ul li a div.video-set span.look-icon')
    hosts = soup.select(
        'div.mode-box.classfiy-box div.video-pic-list ul li a div.video-set span.person-icon.subStrTitle')
    tvs = soup.select('div.mode-box.classfiy-box div.video-pic-list ul li a div.video-set span.tv')

    wb_data = []
    for title, num, host, tv in zip(titles, nums, hosts, tvs):
        data = {
            '标题': title.get_text(),
            '观看人数': num.get_text(),
            '主播': host.get_text(),
            '平台': tv.get_text()
        }
        wb_data.append(data)
    return wb_data


get_one_page()函数主要通过requests方法获得当前网页里面的数据,然后再在parse_one_page()函数里面对获得的网页数据进行抓取。笔者用的是beautifulsoup这个很成熟的第三方库,诶顺便说一下python这个东西第三方库太多了,拥抱开源太重要了,你懂我意思的!最后将获得的wb_data返回供其他程序调用。

然后这个时候就需要一个土白土白的界面了。说起界面qt在这个方面确实做得不错,无论在C++上还是python我都极其喜欢qt。

python爬虫之爬取捞月狗直播信息_第2张图片

因为本次的重点不在UI上就意思意思的做了个土肥圆的界面,搞不了花里花哨的东西,就很费力气,你懂我意思的。

python爬虫之爬取捞月狗直播信息_第3张图片


上图就是抓取之后的界面了,可以看到笔者相当的懒惰,这么丑的东西怎么好意思拿出手,可是笔者这不很累吗。诶,你懂我意思。

那上面的界面如何实现了,又如何和刚才的爬虫结合起来了,这里就不得不说qt的信号槽机制了,简直就是上个时代的创新,就很皮,你知道吧。至于如何写qt的界面那就不是笔者的任务了,讲道理,笔者也只是会点皮毛。具体的代码如下:

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle('捞月狗爬虫')
        layout = QVBoxLayout()
        self.textArea = QTextEdit()
        button = QPushButton('开始')
        button.pressed.connect(self.get_text)

        widget = QWidget()
        widget.setLayout(layout)
        widget.setFixedWidth(800)
        widget.setFixedHeight(600)

        layout.addWidget(self.textArea)
        layout.addWidget(button)

        self.setCentralWidget(widget)

    def add_text(self, url):
        # url = 'http://www.laoyuegou.com/media_v2/live/index/page/1.html'
        html = get_one_page(url)
        wb_data = parse_one_page(html)
        for item in wb_data:
            self.textArea.append(str(item))

    def get_text(self):
        for i in range(1, 10):
            url = 'http://www.laoyuegou.com/media_v2/live/index/page/' + str(i) + '.html'
            # self.textArea.append(url)
            self.add_text(url)

说到这里,笔者已经累得不行了,诶,等会儿还有一晚上的实验课。如果想要入爬虫坑的童靴们,兄弟们,姐妹们,瓜皮们,请移步这里源代码。







你可能感兴趣的:(python爬虫之爬取捞月狗直播信息)