爬虫实战2:豆瓣电影TOP250

1、豆瓣简介

        豆瓣是一个社交网站,起源于2005年,该网站以书影音起家,提供关于图书、电影、音乐唱片的推荐、评价和价格比较,以及城市独特的文化生活。本篇文章将从数据分析的角度来分析豆瓣网站。分析的维度有书籍,书籍类目,书评,电影,电影类型,影评,音乐,音乐类型,音频,还有豆瓣产品介绍等等.....

        本篇文章将以豆瓣电影Top250排行来简要介绍爬虫技术和豆瓣电影

 

2、爬虫开启

        需要爬取的网站页面如下所示,本次爬取的字段包含有排行,海报,电影名,演员,评分,评价人数,电影简介,爬取使用的库为requests,使用的解析方式是bs4,xpath,jquery,re多个模块库来解析页面。

 

 

(1)爬虫准备

import requestsfrom fake_useragent import UserAgentfrom lxml import etreefrom bs4 import BeautifulSoupfrom pyquery import PyQuery as pqimport reimport csv

 

(2)xpath解析

def get_parse(result):    res= etree.HTML(result)    items=res.xpath('//ol[@class="grid_view"]/li')    for item in items:        rank=item.xpath('.//div[@class="pic"]/em/text()')[0]        haibao=item.xpath('.//div[@class="pic"]/a/img/@src')[0]        name=item.xpath('.//div[@class="hd"]/a/span[1]/text()')[0]        actor=item.xpath('.//div[@class="bd"]/p/text()')[0]        pingfen=item.xpath('.//div[@class="star"]/span[2]/text()')[0]        pingjia=item.xpath('.//div[@class="star"]/span[4]/text()')[0]        jianjie=item.xpath('.//p[@class="quote"]/span/text()')[0]        print(rank,haibao,name,actor,pingfen,pingjia,jianjie)

 

(3)bs4解析

# bs4解析def get_parse1(result):    soup = BeautifulSoup(result,'lxml')    items=soup.select('ol>li')    for item in items:        rank=item.select('.pic em')[0].string        haibao=item.select('.pic>a>img')[0]['src']        name=item.select('.hd>a>span')[0].string        actor=item.select('.bd>p')[0].text        pingfen=item.select('.star>span')[1].string        pingjia=item.select('.star>span')[3].string        jianjie=item.select('.quote span')[0].string        print(rank,haibao,name,actor,pingfen,pingjia,jianjie)

 

(4)jQuery解析​​​​​​​

# jquery解析def get_parse3(result):    doc=pq(result)    # 遍历操作,使用item()方法,会得到一个生成器    items=doc('ol>li').items()    for item in items:        rank=item.find('.pic em').text()        haibao=item.find('.pic>a>img').attr('src')        name=item.find('.hd>a>span').text()        actor=item.find('.bd>p').text()        pingfen=item.find('.star>span').eq(1).text()        pingjia=item.find('.star>span').eq(3).text()        jianjie=item.find('.quote span').text()        print(rank,haibao,name,actor,pingfen,pingjia,jianjie)

(5)re解析

 

def get_parse2(result):
    regex = '<em class="">(\d+)</em>.*?<span class="title">(.*?)</span>.*?<p class="">(.*?)</p>.*?<span class="rating_num" property="v:average">(.*?)</span>.*?<span>(.*?)</span>.*?<span class="inq">(.*?)</span>'
    pattern=re.compile(regex,re.S)
    items=re.findall(pattern,result)
    # print(items)
    for item in items:
        content=""
        # 通过空格进行切片处理
        for i in item[2].split():
            content=content+"".join(i)
        # 去除字符串中的&nbsp;和换行符
        content = re.sub('&nbsp;', ' ', content)
        content = re.sub('<br>', ' ', content)
        print(item[0],item[1],content,item[3],item[4],item[5])

 

(6)结果展示

 

 

 


更多精彩内容:关注公众号【有趣的数据】

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值