您的位置:首页 > 编程语言 > Python开发

Python爬虫学习基础——5分钟学会爬取B站视频日播放量排行

2020-01-13 03:21 525 查看

Python爬虫学习基础——5分钟学会爬取B站视频日播放量排行

  • 进入正题
  • 基础包含

    这也是我当初第一次学习爬虫时做的练习,感觉给初学者练笔挺不错的。运用的知识也不是太多,只运用了requests库以及pyquery的相关知识,就算是小白花几个小时也完全可以掌握。

    requests

    requests库相对于我们以前使用的urllib有着更强大的处理网页能力,大部分操作也更加简便。请求一个网页urllib需要:

    import urllib.request
    
    response = urllib.request.urlopen('https://www.baidu.com')
    print(response.read().decode('utf-8'))

    而requests只需要

    import requests
    
    response = requests('https://www.baidu.com')
    print(response.text)

    是不是明显简便了很多。

    pyquery

    pyquery是python的一种解析库,其他比较强大的解析库还有XPath,Beautiful Soup等,这些都可以用来进行网页解析。详细操作我就不再细说了,初学者可以去官网了解。

    进入正题

    首先我们利用requests库将网页源码爬取下来,具体代码如下:

    import requests
    from pyquery import PyQuery as pq
    
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0'}
    
    def get_request(url):
    response = requests.get(url, headers=headers)
    print(response.text)
    
    if __name__ == '__main__':
    url = 'https://www.bilibili.com/ranking?'
    get_request(url)

    运行这段代码结果如下:

    然后我们只要按下F12分析网页即可

    然后根据分析结果利用pyquery编写代码

    def pyquery_re(Response):
    doc = pq(Response)
    results = doc('.rank-list-wrap .rank-list .rank-item').items()
    dict1 = {}
    for result in results:
    dict1['num'] = result('.num').text()
    dict1['href'] = result('.info a').attr.href
    dict1['title'] = result('.info a').text()
    print(dict1)
    
    def get_request(url):
    response = requests.get(url, headers=headers)
    pyquery_re(response.text)

    这里我们把requests请求到的源码通过函数传递给了pyquery进行解析。运行结果如下:

    这样每日播放量排名,视频链接和视频名称就都出来了,最后,完整代码如下:

    import requests
    from pyquery import PyQuery as pq
    
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0'}
    #这里是请求头部,模拟浏览器
    
    def pyquery_re(Response):
    doc = pq(Response)
    results = doc('.rank-list-wrap .rank-list .rank-item').items()     #这里调用了item()方法得到一个生成器,以便于遍历
    dict1 = {}                                                         #初始化一个字典暂时存储爬取下来的信息
    for result in results:
    dict1['num'] = result('.num').text()
    dict1['href'] = result('.info a').attr.href
    dict1['title'] = result('.info a').text()
    print(dict1)
    
    def get_request(url):
    response = requests.get(url, headers=headers)        #请求网页数据
    pyquery_re(response.text)
    
    if __name__ == '__main__':                               #以主函数的方式执行
    url = 'https://www.bilibili.com/ranking?'
    get_request(url)

    是不是感觉很简单。
    当然爬虫不可能这么简单就学会,里面也有很多深奥的东西,有很多反爬措施需要我们去应付,所以,现在开始,一起加油努力吧。
    PS:如果看完这个文章想要练手的小伙伴可以去豆瓣读书哦。当然也可以去爬我们CSDN官网的今日推荐哦

    • 点赞 2
    • 收藏
    • 分享
    • 文章举报
    ℳ๓₯㎕℡ 桜 发布了2 篇原创文章 · 获赞 4 · 访问量 384 私信 关注
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: