pyquery解析+MongoDB+豆瓣音乐/电影

  1. pyquery解析库使用
  2. Mongo使用
  3. 豆瓣电影/音乐爬取

Pyquery使用

直接上源码,如下是豆瓣电影top250源码部分,

<li>
            <div class="item">
                <div class="pic">
                    <em class="">2</em>
                    <a href="https://movie.douban.com/subject/1291546/">
                        <img width="100" alt="霸王别姬" src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p1488213971.webp" class="">
                    </a>
                </div>
                <div class="info">
                    <div class="hd">
                        <a href="https://movie.douban.com/subject/1291546/" class="">
                            <span class="title">霸王别姬</span>
                                <span class="other">&nbsp;/&nbsp;再见,我的妾  /  Farewell My Concubine</span>
                        </a>


                            <span class="playable">[可播放]</span>
                    </div>
                    <div class="bd">
                        <p class="">
                            导演: 陈凯歌 Kaige Chen&nbsp;&nbsp;&nbsp;主演: 张国荣 Leslie Cheung / 张丰毅 Fengyi Zha...<br>
                            1993&nbsp;/&nbsp;中国大陆 香港&nbsp;/&nbsp;剧情 爱情 同性
                        </p>

                        
                        <div class="star">
                                <span class="rating5-t"></span>
                                <span class="rating_num" property="v:average">9.6</span>
                                <span property="v:best" content="10.0"></span>
                                <span>1115749人评价</span>
                        </div>

                            <p class="quote">
                                <span class="inq">风华绝代。</span>
                            </p>
                    </div>
                </div>
            </div>
        </li>

想要获取的信息:
电影名:title
导演:director
评分:rating_num
评价人数:nums
介绍:quota
pyquery解析遵循:***找到节点-解析节点***的思路,

定位节点的方法有:父节点/子节点/兄弟节点
解析节点包含:获取文字/属性
——————————————————————————————
首先定位每一个项目的位置,根据item来确定
电影名根据节点和属性定位:'title':item('span[class="title"]').text()
对导演做正则解析,注意源码中的&并不能匹配到

auth_pattern = re.compile(r': (.*?) ')     #注意源代码中的&并不能匹配到
authinfo = item('.bd').find('p[class=""]').text()
'author':auth_pattern.search(authinfo).group(1)

最后存入数据库中!

最终代码如下:

import re
import requests
import pymongo
from pyquery import PyQuery as pq

MAX_PAGE = 10

def parse_page(index):
    url = 'https://movie.douban.com/top250?start={}'.format((index-1)*25)
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'}
    res = requests.get(url,headers=headers).text
    doc = pq(res)
    items = doc.find('.item').items()
    num_pattern = re.compile(r'\d+')
    auth_pattern = re.compile(r': (.*?) ')     #注意源代码中的&并不能匹配到
    for item in items:
        numinfo = item('.star span').eq(3).text()  
        #print(numinfo)                
        authinfo = item('.bd').find('p[class=""]').text()
        #authinfo = item('.bd p').text()
        movie = {
                'title':item('span[class="title"]').text(),
                'author':auth_pattern.search(authinfo).group(1),
                'score':item('.rating_num').text(),
                'num':num_pattern.search(numinfo).group(0),
                'quota':item('.quote').text()  
        }
        print(movie)
        save_to_Mongodb(movie)

def save_to_Mongodb(data):
    #连接Mongodb
    client = pymongo.MongoClient(host='localhost',port=27017)
    #指定数据库
    db = client.douban 
    #指定集合
    collection = db.doubanmovie
    collection.insert_one(data)

def main():
    for i in range(1,MAX_PAGE+1):
        parse_page(i)

if __name__ == "__main__":
    main()


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值