Python实战之如何爬取豆瓣电影?本文教你

 

爬虫又称为网页蜘蛛,是一种程序或脚本。

但重点在于,它能够按照一定的规则,自动获取网页信息。

爬虫的基本原理——通用框架

1.挑选种子URL;

2.讲这些URL放入带抓取的URL列队;

3.取出带抓取的URL,下载并存储进已下载网页库中。此外,讲这些URL放入带抓取URL列队,进入下一循环。

4.分析已抓取列队中的URL,并且将URL放入带抓取URL列队,从而进去下一循环。
5.光理论是不够的。这里顺便免费送大家一套2020最新python入门到高级项目实战视频教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,还可以跟老司机交流讨教!

758e2825b0c0eb2f1ecfb9adb66000f.png

爬虫获取网页信息和人工获取信息,其实原理是一致的。

如我们要获取电影的“评分”信息

1e2716b4b4f51dc27c6be2ce089bc8b.png

人工操作步骤:

1.获取电影信息的网页;

2.定位(找到)要评分信息的位置;

3.复制、保存我们想要的评分数据。

爬虫操作步骤:

1.请求并下载电影页面信息;

2.解析并定位评分信息;

3.保存评分数据。

爬虫的基本流程

简单来说,我们向服务器发送请求后,会得到返回的页面,通过解析页面后,我们可以抽取我们想要的那部分信息,并存储在指定文档或数据库中,这样,我们想要的信息会被我们“爬”下来了。

00757436e4626c9d881105cf63068b6.png

python中用于爬虫的包很多,如bs4,urllib,requests等等。这里我们用requests+xpath的方式,因为简单易学,像BeautifulSoup还是有点难的。

下面我们就使用requests和xpath来爬取豆瓣电影中的“电影名”、“导演”、“演员”、“评分”等信息。

安装requests和lxml库:

1

2

pip install requests

pip install lxml

一、导入模块

1

2

3

4

#-*- coding:utf-8 -*-

import requests

from lxml import etree

import time #这里导入时间模块,以免豆瓣封你IP

二、获取豆瓣电影目标网页并解析

爬取豆瓣电影《神秘巨星》上的一些信息,地址

https://movie.douban.com/subject/26942674/?from=showing

d8f2a98e43364cfdf8df299c0959896.png

1

2

3

4

5

6

7

8

9

#-*- coding:utf-8 -*-

import requests

from lxml import etree

import time 

url = 'https://movie.douban.com/subject/26942674/'

data = requests.get(url).text

s=etree.HTML(data)

#给定url并用requests.get()方法来获取页面的text,用etree.HTML()

#来解析下载的页面数据“data”。

1.获取电影名称。

获取电影的xpath信息并获得文本

1

s.xpath('元素的xpath信息/text()')

这里的xpath信息要手动获取,获取方式如下:

1.如果你是用谷歌浏览器的话,鼠标“右键”–>“检查元素”;

2.Ctrl+Shift+C将鼠标定位到标题;

3.“右键”–>“Copy”–>“Copy Xpath”就可以复制xpath。

00358b3a487f24c92638ac70f2fc3e8.png

d3dc6f43c2457d566c2ff123abdba8f.png

这样,我们就把电影标题的xpath信息复制下来了。

1

//*[@id="content"]/h1/span[1]

放到代码中并打印信息

1

2

3

4

5

6

7

8

9

10

#-*- coding:utf-8 -*-

import requests

from lxml import etree

import time

url = 'https://movie.douban.com/subject/26942674/'

data = requests.get(url).text

s=etree.HTML(data)

  

film_name = s.xpath('//*[@id="content"]/h1/span[1]/text()')

print("电影名:",film_name)

这样,我们爬取豆瓣电影中《神秘巨星》的“电影名称”信息的代码已经完成了,可以在eclipse中运行代码。

得到如下结果:

1

电影名: ['神秘巨星 Secret Superstar']

OK,迈出了第一步,我们继续抓取导演、主演、评分;

1

2

3

4

5

6

7

film_name=s.xpath('//*[@id="content"]/h1/span[1]/text()')#电影名

director=s.xpath('//*[@id="info"]/span[1]/span[2]/a/text()')#编剧

actor1=s.xpath('//*[@id="info"]/span[3]/span[2]/a[1]/text()')#主演1

actor2=s.xpath('//*[@id="info"]/span[3]/span[2]/a[2]/text()')#主演2

actor3=s.xpath('//*[@id="info"]/span[3]/span[2]/a[3]/text()')#主演3

actor4=s.xpath('//*[@id="info"]/span[3]/span[2]/a[4]/text()')#主演4

movie_time=s.xpath('//*[@id="info"]/span[13]/text()')#片长

观察上面的代码,发现获取不同主演时,区别只在于“a[x]”中“x”的值不同。实际上,要一次性获取所有主演信息时,用不加数字的“a”即可获取。

如下:

1

actors = s.xpath('//*[@id="info"]/span[3]/span[2]/a/text()')#所有主演

所以我们修改好的完整代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

#-*- coding:utf-8 -*-

import requests

from lxml import etree

import time

url1 = 'https://movie.douban.com/subject/26942674/'

data = requests.get(url1).text

s=etree.HTML(data)

  

film_name=s.xpath('//*[@id="content"]/h1/span[1]/text()')#电影名

director=s.xpath('//*[@id="info"]/span[1]/span[2]/a/text()')#编剧

actor=s.xpath('//*[@id="info"]/span[3]/span[2]/a/text()')#主演

movie_time=s.xpath('//*[@id="info"]/span[13]/text()')#片长

#由于导演有时候不止一个人,所以我这里以列表的形式输出

ds = []

for d in director:

    ds.append(d)

     

#由于演员不止一个人,所以我这里以列表的形式输出

acs = []

for a in actor:

    acs.append(a)

print ('电影名:',film_name)

print ('导演:',ds)

print ('主演:',acs)

print ('片长:',movie_time)

结果输出:

1

2

3

4

5

电影名: ['神秘巨星 Secret Superstar']

导演: ['阿德瓦·香登']

主演: ['塞伊拉·沃西''梅·维贾''阿米尔·汗''拉杰·阿晶''提斯·沙马''卡比尔·谢赫''法如克·贾法尔'

'马努杰·沙玛''莫娜·安伯加卡尔''尼基塔·阿南德''尚''莫纳利·塔库尔']

片长: ['150分钟']

怎么样,是不是很简单啊。赶快去试试吧~~~

这里顺便补充点基础知识:

Requests常用的七种方法:

9705613e4fe3f867821c019eb6cc4f9.png

目前,我们只需要掌握最常用的requests.get()方法就好了。

requests.get()的使用方法

1

2

3

import requests

url = 'https://www.baidu.com'

data = requests.get(url)#使用get方法发送请求,返回汗网页数据的Response并存储到对象data 中

Repsonse对象的属性:

data.status_code:http请求的返回状态,200表示连接成功;

data.text:返回对象的文本内容;

data.content:猜测返回对象的二进制形式;

data.encoding:返回对象的编码方式;

data.apparent_encoding:响应内容编码方式。
最后注意:光理论是不够的。这里顺便免费送大家一套2020最新python入门到高级项目实战视频教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,还可以跟老司机交流讨教!

本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个很有趣的问题,我可以为您提供一些 Python 爬取豆瓣电影短评数据并进行词云分析处理的方法,以下是具体步骤: 1. 安装必要的库 需要安装 requests, BeautifulSoup, wordcloud, jieba 等库,可以使用 pip 安装。 2. 获取豆瓣电影的短评数据 使用 requests 库获取电影页面源代码,然后使用 BeautifulSoup 库解析 HTML 页面,找到短评的标签和类名,获取短评的文本信息。 3. 对短评数据进行分词和处理 使用 jieba 库对短评进行分词,去除停用词和无用符号,并统计词频。 4. 生成词云图 使用 wordcloud 库生成词云图,将分词处理后的结果输入 wordcloud.WordCloud() 函数,设置好字体、背景颜色、词云形状等参数,调用 generate_from_frequencies() 函数生成词云图。 以上是简单的流程,具体的代码实现可以参考以下示例代码: ```python import requests from bs4 import BeautifulSoup import jieba import wordcloud # 请求头信息 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} # 短评数据的URL url = 'https://movie.douban.com/subject/1292052/comments?start=0&limit=20&sort=new_score&status=P' # 获取电影页面源代码 html = requests.get(url, headers=headers).text # 使用BeautifulSoup解析HTML页面 soup = BeautifulSoup(html, 'html.parser') # 获取所有短评 comments = soup.find_all('span', 'short') # 将短评文本拼接成一个字符串 text = '' for comment in comments: text += comment.get_text() # 对文本进行分词 words = jieba.cut(text) # 去除停用词和无用符号 stopwords = ['的', '了', '是', '我', '你', '他', '她', '我们', '你们', '他们', '这', '那', '还', '就', '和', '也', '不', '在', '有', '到', '个', '了', '啊', '呢', '吧', '哦', '嗯', '哈', '呀', '嘛', '了', '吗'] filtered_words = [] for word in words: if word not in stopwords and word.strip() != '': filtered_words.append(word) # 统计词频 word_count = {} for word in filtered_words: if word not in word_count: word_count[word] = 1 else: word_count[word] += 1 # 生成词云图 wc = wordcloud.WordCloud( font_path='simhei.ttf', background_color='white', width=800, height=600, max_words=200, max_font_size=100, random_state=30, ) wc.generate_from_frequencies(word_count) # 展示词云图 import matplotlib.pyplot as plt plt.imshow(wc, interpolation='bilinear') plt.axis('off') plt.show() ``` 这样就可以爬取豆瓣电影的短评数据并进行词云分析处理了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值