python翻页爬豆瓣影评_Python超级简单的爬虫案例--爬豆瓣影评为例

今天试了下Python的爬虫,果然简单的一批,适合懵懂的小白。就先放代码吧。。。

from bs4 import BeautifulSoup

import requests

url = 'https://movie.douban.com/subject/35051512/comments?status=P'

r = requests.get(url=url,headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'})

be = BeautifulSoup(r.text,features="lxml")

S = be.select('span[class=short]') #提取包含短评的部分

C = be.select('span[class=comment-info]') #提取包含评分的部分

for i,(s,c) in enumerate(zip(S,C)):

text = s.text.replace('\n','') #获取标签文本,删除换行

score = c.select('span[title]')[0].get('title') 提取评分,因为有两个title属性,评分是第一个。get('title')得到评分结果

print(i,text,score)

恩。直接运行代码,就能得到如下结果:爬虫结果

这十来行的代码就能爬虫,好爽。下面一行行的分析下原理。

那么我如何爬取这些短评内容和评分呢。首先把这个网页丢给request库的get函数,该函数读取网页的源代码,其中headers的值不可少,headers的作用是为了解决反爬虫的,该信息如何找我就不说了,直接粘贴我这个就可以用(我也是粘贴别人的哈哈哈)。自己也可以按照方法找下自己浏览器本身的。

然后将得到的内容丢给BeautifulSoup库按照lxml格式解析,这样我们可以按照xml的方式去寻找我们需要的内容。忘了看源代码的样子了!转换完了后我们可以打印出网页的源代码了,如下图:

好了,经过我们仔细的观察发现,我们需要提取的评论在的标签中!!

好了,这时候再把我们提取的内容循环出来就可以了!

但是,另一个问题就是,如果我想继续循环后面的网页呢,好办!

我们先观察一下下一页评论的网址,https://movie.douban.com/subject/35051512/comments?start=20&limit=20&status=P&sort=new_score,是这个样子的,和我们第一个网址的不同在哪?多了start=20&limit=20&sort=new_score是吧,很明显,start代表这页评论的起始索引,limit=20代表这页评论的数目,sort=new_score不用管,其实变量就一个起始位置嘛,那么我们就可以根据这个思路,写一个网址的变量。如下:

for i in range(10):

start = i * 20

url = 'https://movie.douban.com/subject/35051512/comments?start={}&limit=20&status=P&sort=new_score'.format(start)

上面我把网页重复了10次,也就是前十页的网址,只要把这段代码加到源代码中,就可以爬取多个网页了:

from bs4 import BeautifulSoup

import requests

for i in range(10):

start = i * 20

url = 'https://movie.douban.com/subject/35051512/comments?start={}&limit=20&status=P&sort=new_score'.format(start)

r = requests.get(url=url,headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'})

be = BeautifulSoup(r.text,features="lxml")

S = be.select('span[class=short]')

C = be.select('span[class=comment-info]')

for i,(s,c) in enumerate(zip(S,C)):

text = s.text.replace('\n','')

score = c.select('span[title]')[0].get('title')

print(i,text,score)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值